先上一张图: 解释:上图为一棵树形的数据结构,思想为 采集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的子文档插入(首先要查询待插入的子文档)带有一定的重复性。
对于上述的需求怎么选择一个合理的数据库和设计存储格式呢?
望大家讨论出主意。。。
Quelles sont vos exigences en matière de demande ? ? ?
Je voudrais demander à quelqu'un à l'étage, quelle est votre demande de renseignements ? S'il s'agit uniquement de stockage et que les exigences de requête sont très simples, il est recommandé d'envisager le stockage des journaux. Stockez les données selon la structure de répertoires que vous avez décrite. Si vous avez besoin de statistiques, écrivez simplement un petit script. La vitesse n'est pas nécessairement plus lente que de les stocker dans la base de données.