【问题标题】:How to select which database to use for object storing如何选择用于对象存储的数据库
【发布时间】:2013-05-03 15:24:02
【问题描述】:

我想部署一个我想到的小型 Web 项目,其中我要保存的数据是内部具有嵌套结构的结构,并且大多数情况下内部结构没有相同的字段和类型。

例如,我想要这样的东西,成为表格中的“行”

{ 
  event : "The Oscars",
  place : "Los Angeles, USA",
  date : "March 2, 2014"
  awards :
  [

    bestMovie : 
    [

      name : "someName",
      director : "someDirector",
      actors :
      [
        ... etc
      ]

    ],

    bestActor : "someActor"

  ]

}

(目前JSON对象对我来说很容易使用,并且在服务器和客户端之间传递它。客户端在JavaScript上运行)

我从 MySQL/PHP 开始,但很快我发现它不适合我。我尝试了 mongoDB 几天,但我不知道如何精确地优化我的搜索,哪个是最好的数据库。 我希望能够设置一些对象模型/模式,并准确选择要更新的部分以及每个结构中的哪些字段是唯一的。

有什么建议吗?谢谢。

【问题讨论】:

    标签: database nosql object-oriented-database


    【解决方案1】:

    这不是一个可以回答的问题,因此可能会被关闭。 这里没有一个正确的答案,有几个问题要问,例如数据结构、速度要求,以及关于您需要什么的旧 CAP 定理问题:

    • 一致性
    • 可用性
    • 分区能力

    我建议如果您是在随意工作并且不需要大规模处理上述任何问题,那么 mongo 将是一个不错的起点。 Couch 是另一个类似的选择,但没有相同的社区规模。

    我说 mongo 是因为您的数据被非规范化为文档,而 mongo 擅长提供文档。它也会说json!

    RDBMS 数据库将要求您对文档进行非规范化并创建关系,与将文档粘贴到文档中相比,这是相当多的工作。

    您可以使用协议缓冲区序列化数据并将其放入 rdbms,但这是不可取的。

    为了获得极快的速度,您可以使用在内存中具有恒定时间查找的 redis。但这更适合(在大多数情况下)用户会话等临时数据,而不是长期持久存储。

    最后还有像 neo4j 这样的图形数据库,它们是类文档数据库,用于存储具有类型边的节点之间的关系。这非常适合社交和推荐问题,但这可能不是您要解决的问题 - 在这个问题中,它只是说明什么最适合您的数据存储。

    看看一些可能性,我认为您可能会发现 mongo 最适合您的需求,因为您已经拥有 json 文档结构并且只需要对这些文档进行简单的持久性。

    【讨论】:

    • 非常感谢。我知道这是一个“通用”问题。我现在会坚持使用 mongoDB。
    猜你喜欢
    • 2011-10-22
    • 2014-10-21
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2010-10-15
    • 2021-12-11
    相关资源
    最近更新 更多