请仔细查看我的问题,谢谢。
我设计了一个用于存储监视器信息的集合。存储在集合中的数据如下所示:
{
metric_name: 'physical_memory_used',
server_name: 'server_a',
time: timestamp,
value: 2000
tag1: value1,
tag2: value2,
...
}
metric_name 是“physical_memory_used”,“process_count”等受监控项目的名称。这是每个文档的必填字段。
server_name 表示此数据来自哪个服务器。所以它也是一个必填字段。
时间存储收集数据时的时间戳。也是强制性的但是这些字段的价值会经常变化。因为我只存储最新数据,所以我每5秒钟存储一次。
值存储此受监控项目的收集值,因此也是必需的。而且它也经常变化。与提交时间的原因相同。
tag1:value1,tag2:value2等其他字段不是必需的。因为不同的监控项可能具有不同的属性。例如:NIC可能有一个tag:value对,如'nic_name:eth0',表示nic名称。
我在
上创建了一个索引metric_name
server_name
因为这两个是必填字段(这意味着每个文档都有它们),并且不会像时间和值字段那样频繁更新。
此索引不是唯一索引,因为一个服务器的一个度量标准可能包含多个文档。例如:一个服务器的度量nic_io_per_seconds可能会生成多个文档,因为可能有多个nics。我们使用tag:value pair(如nic_name = eth0)来分隔它们
以下是我的关注
The collection may be update thousands of servers each seconds.
I will have another system querying the collection every seconds.
更新和查询将始终使用我创建的索引。
这是一个糟糕的设计吗?
我做了一些搜索和研究,认为没关系。因为虽然该集合每秒钟会更新数万次。这些更新将在不同的文件上发生。 (不同的服务器,不同的监控项目)所以没有竞争。索引列“metric_name”,“server_name”也将始终保持相同的值,不会更新。所以不应该对索引进行任何更新,所以应该没问题。
关于搜索。虽然收藏可能非常大。但是通过索引(metric_name,server),我们总能获得非常少的数据集。所以表现应该没问题
以上只是我的猜测。我不确定在这里问一下。如果你有
,请提供一些建议