【问题标题】:NoSQL databases - good candidates for log processing/aggregation and rollup? [closed]NoSQL 数据库 - 日志处理/聚合和汇总的良好候选者? [关闭]
【发布时间】:2011-01-20 11:36:55
【问题描述】:

我有一个用于捕获带宽统计信息的 MS SQL 数据库。我们有一个原始数据表,为了提高不同钻取级别的报告速度,我们每小时、每天和每周汇总数据并将其汇总到单独的表格中。

Mongo 或 Raven 等 NoSQL 数据库是否适合此类应用程序?

【问题讨论】:

    标签: mongodb ravendb nosql


    【解决方案1】:

    不同的 NoSQL 解决方案针对不同的用途解决不同的问题 - 所以首先最好的办法是查看您的问题并将其分解

    • 您将大量写入存储,因此写入速度对您很重要
    • 您希望对该数据执行聚合操作并获得易于查询的结果
    • 从表面上看,读取速度并不是那么重要,至少在“Web 应用程序必须真正响应数百万人”之类的情况下并不重要
    • 不知道你是否需要动态查询

    让我们以一种非常高级、概括的方式来看看 Couch、Mongo 和 Raven

    乌鸦

    • 快速写入
    • 快速查询(最终一致、预先计算、通过 map/reduce 聚合)
    • 可以进行动态查询,但不太适合您的用例,因为您很可能会按日期等进行查询

    蒙古人

    • 快速写入(在我看来很危险,因为断电意味着丢失数据 ;-))
    • 读取速度较慢,通过 map/reduce 进行聚合,未预先计算
    • 动态查询只是 what_you_do,但如果您希望对此类数据有任何类型的性能,您可能必须在列上定义索引

    沙发

    • 快速写入
    • 快速读取(预先计算,但仅在您读取时更新 (IIRC)
    • 无法进行动态查询,所有查询均通过 map 或 map/reduce 函数预定义

    所以,基本上 - 您需要对此类数据进行动态查询吗?阅读速度对您来说非常重要吗?如果您需要动态查询,那么您将需要 Raven 或 Mongo(对于这种东西,Couch 可能不是您想要的)。

    FWIW,在我看来,Mongo 的唯一用例是用于日志记录,所以你可能会有一个答案。

    【讨论】:

    • 在选择之前询问有什么要求的好答案:)
    • @Rob:我知道 CouchDB 查询不是预先计算的,它们是按需延迟计算,然后缓存的。除此之外,+1。
    • 这不是我说的吗?这实际上是预先计算的 - 额外的查询会将迄今为止的结果与任何更改的数据“但仅在您阅读时更新”
    • 我会澄清一下,预定义可能是一个更好的词
    • MongoDB 的一个选项是使用 $inc 和 upsert 进行实时汇总 - 如果您提前知道要如何汇总,这可以让您存储更少的数据。 (我将每个事件 6-10 次插入到多个汇总表中,而且速度非常快)。另外 - 在副本集中设置,数据丢失的可能性很小(在 1.8 中,他们添加了一个完全持久性的日志)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多