特定情况的存储引擎

时间:2011-02-16 12:13:58

标签: mongodb memory redis rdms database

您可以为这种情况推荐哪些数据库:

  1. 非常多的插入和更新
  2. 复杂的查询(SQL或类似的东西)
  3. 大量数据,但频繁访问的数量很少(可以在内存中)
  4. 在崩溃的情况下(但不是一切),可以丢失部分数据(例如最近一小时)
  5. 可能的解决方案和问题:

    • Redis - 看起来不错,但它不支持复杂的查询。
    • RDBMS(当前解决方案) - 保证ACID并使用硬盘很多,因此更新太慢
    • RDBMS + RAM光盘 - 将使用操作系统交换,恢复问题,并且通常看起来不太可靠
    • MongoDB - 写入时服务器级锁定,它真的很快吗?

3 个答案:

答案 0 :(得分:1)

关系 Mysql / Postgresql +分区应该能够解决用例。 MongoDb可能是理想的解决方案,除了两个原因。

  • 需要足够的RAM来确保数据库的相当一部分在内存中。
  • 支持复杂查询。由于不支持JOINS,需要在多个位置复制数据,或者必须在应用程序代码中执行JOINS。

  • 执行复杂的分析查询。 Data aggregation mongodb vs mysql

  

有类似的情况并评估postgresql vs mongodb。由于上述原因,选择了postgresql +分区(分区在时间戳上完成)。

如果数据集是按时间排序的,或者如果可以以某种方式进行分区,则更新和查询将会很快。

对于mysql,如果使用MYISAM(非事务性)存储引擎,性能将以耐用性为代价进一步提高。对于不允许关闭事务的RDBMS,仍然可以通过调整检查点间隔和少数其他参数来提高性能,这些参数确保以轻松的方式提交事务。但是,如果架构可以频繁更改,那么RDBMS解决方案可能很复杂。

答案 1 :(得分:0)

现在,复杂的查询和插入速度不会混淆。当然,除非这些查询提前知道。是吗?

答案 2 :(得分:0)

  

1.非常多的插入和更新( Mobgodb )。

     

4.如果发生崩溃(但不是一切),可以丢失部分数据(例如最近一小时)(

mongo中的可选异步写入将有助于提高速度。在mongodb中插入/写入的速度将比sql快,因为mongo首先将所有数据写入内存,而mongodb不使用事务。

  

2.复杂的查询(SQL或类似的东西)

如果您有很多需要加入的硬报告,几乎所有数据都更好地使用sql。但如果您需要在文档内部进行硬查询,请使用mongodb(取决于sql / nosql db架构设计)

  

3.大量数据,但频繁访问的数量很少(可以在内存中)

如果服务器mongodb上有足够的可用内存,则将所有数据加载到RAM中。

由于我mongodb狂热我将选择MongoDb,但没有具体任务不能确定选择是否正确。 另外我只比较了sql和mongodb,因为我根本不使用Redis。