我们使用Mnesia作为一个大型系统的主要数据库.Mnesia碎片表在测试期间表现良好.该系统有大约15个表,每个表跨2个站点( node )复制,每个表都是高度碎片化的.在测试阶段(侧重于可用性、效率和负载测试),我们接受了Mnesia,因为它具有复杂 struct 的许多优点,可以为我们提供帮助,因为我们在服务之上运行的所有应用程序都是Erlang/OTP应用程序.我们正在运行Yaws 1.91作为主Web服务器
现在,问题是.Mnesia有桌子大小的限制,是的,我们同意.然而,任何地方都没有提到对碎片数量的限制.出于性能方面的原因,并且为了满足 Big Data 的需要,大概有多少个片段才能使健忘症保持"正常"呢?
在我们的一些表中,我们有64个片段.将n_disc_only_copies
设置为集群中的 node 数,这样每个 node 每个片段都有一个副本.这帮助我们解决了在给定 node 瞬间无法触及时出现的mnesia写入失败问题.同样在上面的博客中,他建议the number of fragments should be a power of 2
,这个声明(他说)是从mnesia对记录进行散列的方式进行调查的.然而,我们需要更多的解释,以及这里讨论的两种力量的哪一种:2,4,16,32,64128,...?
该系统拟在HP Proliant G6上运行,包含英特尔处理器(2个处理器,每个4核,每个核2.4 GHz速度,8 MB缓存大小),20 GB RAM大小,1.5 TB磁盘空间.现在,我们有两台这样的大功率机器.系统数据库应该跨这两个数据库进行复制.每台服务器都运行Solaris 10,64位.
记忆障碍的表现在多少个片段时可能开始降级?如果我们将给定表的碎片数量从64增加到128,可以吗?65536个碎片(2^16)怎么样?我们如何通过使用碎片来扩展我们的记忆力,以利用TB空间?
请务必提供问题的答案,您可以就可能增强系统的任何其他参数提供建议.
注意:所有要保存数百万条记录的表都是以disc_only_copies
种类型创建的,所以没有RAM问题.RAM足够我们运行的几个RAM表使用.其他DBMS,如MySQL集群和CouchDB也将包含数据,并与我们的Mnesia DBMS使用相同的硬件.MySQL群集跨两台服务器(每台服务器包含两个NDB node ,一台MySQL服务器)进行复制,管理 node 位于不同的主机上.