使用NoSQL数据库为JSON数据提供高效且可扩展的存储
我们正在开发一个项目,该项目应收集日志和审计数据并将其存储在数据存储中以用于存档和一些视图.我们不太确定哪个数据存储区对我们有用.
>我们需要存储小的JSON文档,大约150个字节,例如“audit:{timestamp:’86346512′,host’:’foo’,用户名:’bar’,任务:’foo’,结果:0}”或“journal:{timestamp:’86346512′,host’:’foo ”,terminalid:1,类型= ‘酒吧’,RC = 0}” 目前我们正在评估NoSQL数据库,如Hadoop / Hbase,CouchDB,MongoDB和Cassandra.这些数据库对我们来说是正确的数据存储吗?哪个最适合?
>每天100万次插入约10次插入/秒.大多数数据库都可以解决这个问题,远低于我们从Cassandra在合理硬件上获得的最大插入速率(50k插入/秒)
>您的要求“在保留时间数据可能被删除后”很适合Cassandra的列TTL – 当您插入数据时,您可以指定保留多长时间,然后后台合并进程将在达到该超时时丢弃该数据. >“数据应以有效的方式存储,例如Apache Avro使用的二进制格式” – Cassandra(与许多其他NOSQL存储一样)将值视为不透明的字节序列,因此您可以根据自己的喜好对值进行编码.您还可以考虑将值分解为一系列列,这样您就可以执行更复杂的查询. >自定义查询,例如“获取用户和时间段的审核” – 在Cassandra中,您可以通过将行键设置为用户ID并将列键作为事件的时间(很可能是timeuuid)来对此进行建模.然后,您将使用get_slice调用(或更好的CQL)来满足此查询 >或’获取terminalid和time period’ – 如上所述,将行键设为terminalid,列键为时间戳.需要注意的一点是,在Cassandra中(与许多无连接存储一样),通常不止一次(以不同的方式)插入数据以针对不同的查询进行优化. > Cassandra有一个非常复杂的复制模型,您可以在其中为每个操作指定不同的一致性级别. Cassandra也是一个非常可扩展的系统,没有单点故障或瓶颈.这实际上是Cassandra与MongoDB或HBase之类的主要区别(不是我想要启动火焰!) 说完所有这些后,您可以通过更传统的数据库和简单的主从复制轻松满足您的要求,这里的任何内容都不会太繁琐 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |