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