我正在阅读维基百科上的这篇文章:http://en.wikipedia.org/wiki/Shard_(database_architecture),试图找到这两种技术之间的主要区别。以下是我找到的内容:
水平分区将一个或多个表按行拆分,通常在模式和数据库服务器的单个实例内。它可能通过减少索引大小(从而减少搜索工作量)提供优势,前提是有一些明显、稳健、隐含的方法来识别特定行将在哪个表中找到,而不需要首先搜索索引,例如“CustomersEast”和“CustomersWest”表的经典示例,在这个例子中,他们的邮政编码已经指出了他们将被找到的位置。
分片超越了这一点: 它以相同的方式对问题表进行分区,但是它在模式的多个实例之间执行此操作。明显的优点是,大型分区表的搜索负载现在可以分散到多个服务器(逻辑或物理),而不仅仅是在同一逻辑服务器上的多个索引。
据我所知,水平分区更适用于单实例(单节点环境),而分片用于多节点/多数据中心环境。这正确吗?还是有不同的使用场景?
额外问题: 对于一个具有数百万行的巨大表(约4-5列的简单模式),如何提高对该表的读写性能最好?
水平分区将一个或多个表按行拆分,通常在模式和数据库服务器的单个实例内。它可能通过减少索引大小(从而减少搜索工作量)提供优势,前提是有一些明显、稳健、隐含的方法来识别特定行将在哪个表中找到,而不需要首先搜索索引,例如“CustomersEast”和“CustomersWest”表的经典示例,在这个例子中,他们的邮政编码已经指出了他们将被找到的位置。
分片超越了这一点: 它以相同的方式对问题表进行分区,但是它在模式的多个实例之间执行此操作。明显的优点是,大型分区表的搜索负载现在可以分散到多个服务器(逻辑或物理),而不仅仅是在同一逻辑服务器上的多个索引。
据我所知,水平分区更适用于单实例(单节点环境),而分片用于多节点/多数据中心环境。这正确吗?还是有不同的使用场景?
额外问题: 对于一个具有数百万行的巨大表(约4-5列的简单模式),如何提高对该表的读写性能最好?