Mongodb 我是否可以设计一个mongo集合,它将由许多客户端更新?

Mongodb 我是否可以设计一个mongo集合,它将由许多客户端更新?,mongodb,Mongodb,请仔细看我的问题,谢谢 我设计了一个集合来存储监视器信息。集合中存储的数据如下所示: { metric_name: 'physical_memory_used', server_name: 'server_a', time: timestamp, value: 2000 tag1: value1, tag2: value2, ... } metric\u name是受监控项目的名称,如“使用的物理内存”、“进程计数”。这是每个文档的必填字

请仔细看我的问题,谢谢

我设计了一个集合来存储监视器信息。集合中存储的数据如下所示:

{
    metric_name: 'physical_memory_used',
    server_name: 'server_a',
    time: timestamp,
    value: 2000
    tag1: value1,
    tag2: value2,
    ...
}
metric\u name是受监控项目的名称,如“使用的物理内存”、“进程计数”。这是每个文档的必填字段

服务器\u name指示此数据来自哪个服务器。所以它也是一个必填字段

time存储收集数据时的时间戳。也是强制性的。但此字段的值将经常更改。因为我只存储最新的数据,并且每5秒存储一次

存储此受监控项目的收集值,因此也是必需的。而且变化也非常频繁。与提交的时间相同的原因

其他字段如tag1:value1、tag2:value2不是必填字段。因为不同的监视项可能具有不同的属性。例如:NIC可能有一个标记:值对,如“NIC\u name:eth0”,以指示NIC名称

我在上面创建了一个索引

metric_name
server_name
因为这两个字段都是必填字段(这意味着每个文档都有它们),并且不像时间和值字段那样频繁更新

此索引不是唯一的索引,因为一台服务器的一个指标可能有多个文档。例如:由于可能有多个nic,一台服务器的度量nic_io_/u秒可能会生成多个文档。我们使用诸如nic_name=eth0这样的标记:值对来分隔它们

下面是我关心的问题

The collection may be update thousands of servers each seconds.

I will have another system querying the collection every seconds. 
更新和查询将始终使用我创建的索引

这是一个糟糕的设计吗

我做了一些搜索和研究,认为这是好的。因为虽然集合每秒钟都会更新数万次。这些更新将发生在不同的文档上。(不同的服务器,不同的监控项目)因此没有竞争。此外,索引列“metric\u name”、“server\u name”将始终保持相同的值,不会更新。所以不应该导致索引上的任何更新,所以应该可以

关于搜索。虽然藏品可能很大。但是,尽管索引(metric_name,server)的数据量很小,我们还是可以得到一个很小的数据集。所以性能应该可以


以上只是我的猜测。我不确定,所以在这里问吧。如果你对我有什么意见,请给我一些建议。我会考虑使用<代码> MeTimeCyNeX和 Serv.FixNeX/COD>作为一个复合的代码>代码ID这样的字段:<代码>关于性能:您需要实现这一点,然后进行测量和优化。其他任何事情都只是“悬而未决”的猜测。@dnickless错了。使用
\u id:{metric\u name:“something”,server\u name:“something”}
,每个服务器可以为每个度量写一个精确的文档。做理论上正确的建模是绝对有意义的。测量你的设置可以得到什么,然后给出一个关于比例因子的想法。@MarkusWMahlberg:OP说他将“只存储最新的数据”,所以这应该是可以的-事实上这将有助于确保他确实只存储一组信息,而这正是我的建议的来源。@dnickless Nope。因为在写入第一个数据集之后,所有其他数据集都会出错。应防止更新或升级,因为这需要查找和写入,而不是写入。latest也可以表示“最近24小时/周”;)使用低基数字段作为
\u id
是一个非常糟糕的主意™. 不过,这些服务器都是你的还是可以有多个客户端?我们讨论的是要监视的地理分布服务器吗?