如何选择用于对象存储的数据库

时间:2013-05-03 15:24:03

标签: database nosql object-oriented-database

我想部署一个我想到的小型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几天,但我不知道如何完善我的搜索,哪个是最好的数据库使用。 我希望能够设置一些对象模型/模式,并准确选择要更新的部分以及每个结构中哪些字段是唯一的。

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:1)

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

  • 一致性
  • 状况
  • 分区的能力

我建议mongo将是一个很好的起点,如果你随便工作,并且预计不必大规模处理上述任何问题。 Couch是另一个类似的选择,但没有相同的社区规模。

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

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

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

对于超快的速度,您可以使用redis,它在内存中具有恒定的时间查找。但这更适合(在大多数情况下)短暂的数据,如用户会话 - 而不是长期持久存储。

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

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