RDBMS:针对单个巨大表的RAID与表分区

时间:2013-12-06 15:34:31

标签: mysql postgresql performance rdbms large-data


我们有一个大约10 TB的巨大表,其中每行大约10 KB。 主键的类型是BIGINT,它是均匀分布的。 该服务器具有40 GB的RAM,两个4核Xeon CPU和五个2 TB磁盘。工作负载仅是单个插入/更新或由主键选择。不需要交易或加入。

考虑到表和可用的RAM,似乎缓存不会非常有效,因为查询大多是随机的。现在问题是哪个配置更适合每秒更多查询(特别是选择):

  1. 使用带有条带化的RAID-0或LVM来提高读/写性能。
  2. 使用表分区(使用主键)并将每个表存储在不同的硬盘中。
  3. 我们想使用MySQL,但是像PostgreSQL这样的其他开源DBMS也是可以接受的。从逻辑上讲,对于我们的设置,分区必须更好地工作,因为搜索在不同的磁盘之间分配。但是,最常用的模式是使用RAID-0。

    有没有人对此问题有任何想法或经验。

1 个答案:

答案 0 :(得分:2)

无论是跨越不同的物理磁盘划分数据,还是使用RAID 0,我们的想法是,您可以在多个可以并行工作的驱动器磁头/磁盘之间拆分磁盘访问,以加快访问速度。

理论上,它们是相当等价的,但是,当我们考虑索引带来的好处时,应该提前进行分区。

您在问题中说明您正在插入记录(不仅仅是追加),因此,您的索引通常需要重建。重建较小的分区索引比重建一个巨大的索引的开销要少,更不用说其他分区的并发优势,而不必等待另一个分区重建。

此外,搜索分区(较小)索引的速度更快。这两个索引的好处都是表分区存在的主要原因,所以它在这里似乎是一个很好的例子。

我从未在多个物理磁盘上对表进行分区。假设它是可能的,这听起来是个好主意。