先上一张图: 解释:上图为一棵树形的数据结构,思想为 采集50000台机器的性能数据,每5分钟采集一次,存储两年(两年后数据才可以被删除,所以有730天),每台机器有一个ip地址(50000个机器就有50000个ip地址),多个端口(比如交换机就有:eth0,eth1,...),每个端口采集16个性能数据(收包数量,发包数量,错误包数量...等,也就是图中的key),每个key对应288个value(因为每5分钟采集一次,一天一个key就有288条value。)
我的初步设想是用NOsql来存储这些数据,把日期(就是树的第一层)设计为集合。ip地址(第二层)设计为文档。采用mongodb,端口以及后面的(第三层以及后面的层)设计成子文档。这样 当采集一条数据回来时,就按照树形查找,有则插入数据,无则在路途中添加没有的树枝条。
例如:来了一条数据:2013-5-8. 192.168.10.1. eth0. key1. value4就将value4插入value3下方。
又来了一条数据:2013-5-8. 192.168.10.1.eth1. key1. value1就在eth0下方新生一个eth1枝条,继续添加数据。
但是mongodb的子文档插入(首先要查询待插入的子文档)带有一定的重复性。
对于上述的需求怎么选择一个合理的数据库和设计存储格式呢?
望大家讨论出主意。。。
黄舟2017-04-22 08:58:07
윗층에 물어보고 싶은데 문의사항이 무엇인가요? 단지 저장소이고 쿼리 요구 사항이 매우 간단한 경우 로그 저장소를 고려하는 것이 좋습니다. 설명된 디렉터리 구조에 따라 데이터를 저장합니다. 통계가 필요한 경우 간단한 스크립트를 작성하면 데이터베이스에 저장하는 것보다 속도가 반드시 느린 것은 아닙니다.