我们有一个大约10 TB的巨大表,其中每行大约10 KB。
主键的类型是BIGINT,它是均匀分布的。
该服务器具有40 GB的RAM,两个4核Xeon CPU和五个2 TB磁盘。工作负载仅是单个插入/更新或由主键选择。不需要交易或加入。
考虑到表和可用的RAM,似乎缓存不会非常有效,因为查询大多是随机的。现在问题是哪个配置更适合每秒更多查询(特别是选择):
我们想使用MySQL,但是像PostgreSQL这样的其他开源DBMS也是可以接受的。从逻辑上讲,对于我们的设置,分区必须更好地工作,因为搜索在不同的磁盘之间分配。但是,最常用的模式是使用RAID-0。
有没有人对此问题有任何想法或经验。
答案 0 :(得分:2)
无论是跨越不同的物理磁盘划分数据,还是使用RAID 0,我们的想法是,您可以在多个可以并行工作的驱动器磁头/磁盘之间拆分磁盘访问,以加快访问速度。
理论上,它们是相当等价的,但是,当我们考虑索引带来的好处时,应该提前进行分区。
您在问题中说明您正在插入记录(不仅仅是追加),因此,您的索引通常需要重建。重建较小的分区索引比重建一个巨大的索引的开销要少,更不用说其他分区的并发优势,而不必等待另一个分区重建。
此外,搜索分区(较小)索引的速度更快。这两个索引的好处都是表分区存在的主要原因,所以它在这里似乎是一个很好的例子。
我从未在多个物理磁盘上对表进行分区。假设它是可能的,这听起来是个好主意。