Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb中的强制分片,标签感知分片?_Mongodb_Sharding - Fatal编程技术网

mongodb中的强制分片,标签感知分片?

mongodb中的强制分片,标签感知分片?,mongodb,sharding,Mongodb,Sharding,我感兴趣的是构建一个系统来查询大量独立机器上生成的日志文件 我不想将它们全部发送到一个中央数据库,而是将整个机器视为一个分布式数据库 现在我正看着Mongo做这件事。每台机器的日志将是存储在该机器上的一个碎片 数据丢失很好,完全不需要冗余。非常重要的是,每台机器对一个碎片负责,并且只包含它生成的日志 通读文档,似乎更常见的用例是支持冗余和自动平衡。看起来标记感知切分可以实现我想要的功能: 因为我对Mongo比较新,所以我想在进行深入研究之前,我应该先征求一些有经验的意见。我想在这里做的是不弯曲工

我感兴趣的是构建一个系统来查询大量独立机器上生成的日志文件

我不想将它们全部发送到一个中央数据库,而是将整个机器视为一个分布式数据库

现在我正看着Mongo做这件事。每台机器的日志将是存储在该机器上的一个碎片

数据丢失很好,完全不需要冗余。非常重要的是,每台机器对一个碎片负责,并且只包含它生成的日志

通读文档,似乎更常见的用例是支持冗余和自动平衡。看起来标记感知切分可以实现我想要的功能:


因为我对Mongo比较新,所以我想在进行深入研究之前,我应该先征求一些有经验的意见。我想在这里做的是不弯曲工具吗?在继续之前,我应该知道这个用例有什么大的优点/缺点吗?

获得以下问题的答案应该有助于您设计系统

  • 你说的是多少个日志主机
  • 这些主机是否分布在不同的地理位置
  • 每单位时间要存储多少个日志条目?(例如,每天100万欧元?)
  • 您希望将日志条目保留多长时间
  • 如果你丢失了数据,你在乎吗
  • 如果带有DB的主机出现故障,是否希望故障切换到另一个系统
至于我的理解,为什么你会说:“每台机器对一个碎片负责并且只包含它产生的日志是非常重要的”

要记住的另一件重要事情是,NoSQL解决方案通常取决于您希望如何使用数据。计划要对数据执行的查询将影响数据的设计和模式

首选的设置是只使用一台主机来保存所有日志吗? 我不建议每个记录信息的主机都有一个碎片。在这种设置下,如果有很多主机,查询速度会很慢。而是登录到文件系统并将这些日志推送到MongoDB,或者使用类似Splunk的日志应用程序

如果您担心丢失所有数据,请使用更多副本集成员(二级副本)

如果要执行任何备份或故障切换,建议使用其他主机(辅助主机)


如果您决定使用分片,并且每个分片都有一个不同的“标签”,那么分片之间不应该发生平衡。当MongoDB检测到一个碎片比另一个碎片大时,就会发生平衡。然后,它将文档从大碎片移动到较小的碎片。如果您强制文档位于带有“标记”的特定碎片上,那么它们将无法移动。

谢谢您的回答。出于好奇,为了回答您的问题,该系统有一个上万台机器的高端用例,并且由于数据隐私原因,无法跨碎片共享日志。我应该有足够的信息从这里开始!