我感兴趣的是构建一个系统来查询在相当多的独立机器上生成的日志文件。
与其将它们全部发送到一个中央数据库,我更希望将整个机器视为一个分布式数据库。
现在我正看着蒙戈做这件事。每台机器的日志都是存储在那台机器上的一个碎片。
数据丢失将是很好的,完全不需要冗余。非常重要的是,每台机器都要对一个碎片负责,并且只包含它生成的日志。
通过阅读文档,似乎更常见的用例是支持冗余和自动平衡。看起来,标记感知切分可以做我想做的事情:http://docs.mongodb.org/manual/core/tag-aware-sharding/。
因为我是新来的蒙戈,我想我应该在深潜之前先征求一些有经验的意见。我想在这里做的事情不需要弯曲工具吗?在继续之前,我应该知道这个用例有什么大的优缺点吗?
发布于 2014-01-10 14:25:59
获得以下问题的答案将有助于您设计系统。
至于我的理解,你为什么说:“每台机器都要对一个碎片负责,并且只包含它产生的日志,这是非常重要的”?
要记住的另一件重要的事情是,NoSQL解决方案通常取决于您希望如何使用数据。计划要对数据执行的查询将影响您的设计和数据的架构。
首选设置是否只使用一个主机来保存所有日志?我不建议每个主机都有一个记录信息的碎片。在这种情况下,如果有很多主机,查询就会很慢。相反,登录到文件系统并将这些日志推送到MongoDB,或者使用像Splunk这样的日志记录应用程序。
如果您关心的是丢失所有数据,请使用更多的副本集成员(第二个)。
如果您想要进行任何备份或故障转移,建议使用其他主机(次要主机)。
如果您决定使用切分,并且每个碎片都有一个不同的“标记”,那么碎片之间就不应该发生任何平衡。当MongoDB检测到一个碎片比另一个碎片变得更大时,就会发生平衡。然后,它将文档从大碎片移动到较小的碎片。如果您强迫文档在带有“标记”的特定碎片上生存,那么它们就无法移动。
https://stackoverflow.com/questions/21010005
复制