什么时候应该使用文档数据库,关系数据库和图形数据库?[关闭]


29

为了讨论的目的,让我们考虑一个FourSquare方案。

情境

实体:

  • 用户数
  • 地方

关系:

  • 签到:用户<->地点,很多对很多
  • 朋友:用户<->用户,多对多

数据库设计

这些很可能有错误,请指出。

关系数据库管理系统

表格:

  • 用户数
  • 地方
  • 签到(交界处)
  • 朋友(交界处)

优点:

  • CAP:一致性,可用性

缺点:

  • CAP:分区容限,也称为分片
  • 方案=不灵活的结构
  • 复制不良?

图形

对象:

  • 用户数
  • 地方

边缘:

  • 朋友:用户<->用户
  • 签到:用户->地点
    • 包含时间戳

优点:

  • CAP:一致性,可用性?
  • 无模式,易变的对象和边缘
  • 图形遍历查询,例如:
    • 聚类
      • 寻找一群朋友
      • 寻找类似人喜欢的餐厅
    • 还有其他常见/有用的查询吗?

缺点:

  • CAP:分区容忍度?

文件/物件

3个独立的数据库?

  • 用户数
    • 朋友清单
  • 签到
    • 时间戳记
    • 用户
    • 地点
  • 地方

优点:

  • CAP:可用性,分区容限
  • 无模式,易变的对象

缺点:

  • CAP:一致性

问题

作为记录,他们最终使用了MongoDB。除了上述所有问号外:

  1. 我不确定如何实现文档数据库。
  2. 文档数据库如何获得分区容限?
  3. 为了获得单个用户的签到,我假设该操作将解析所有签到并过滤用户名的元数据(map + filter)。为每个用户解析1,000,000+个文档的性能将非常差。我认为这不是正确的行为?
  4. 还有哪些其他优点/缺点?

(1)您需要在业务术语中阐明两张桌子之间的所有权。这是因为可能存在平行关系。例如,用户<->用户并不意味着1毫米的关系。它可能意味着不止1个。例如:一个用户喜欢另一个用户,而一个用户讨厌另一个用户。这些是2关系。(2)如果您可以“准确地”总结出您想要的东西,那将会有所帮助。
NoChance 2012年

@EmmadKareem:(1)我不想使情况复杂化。我唯一感兴趣的用户<->用户关系是相互之间的友谊,这是多对多的联系。(2)我想回答帖子底部列出的4个问题。
2012年

Answers:


13

您的问题可能是一学期的大学课程的主题。您需要将其分解为可管理的块。因此,我将只给出部分答案。

在决定使用哪种数据库时,要看的第一件事是要运行哪种查询以及在创建数据库之前是否会全部知道它们。SQL数据库具有对数据库中所有数据进行强大而灵活的查询的优势。图形数据库具有高度专业化的查询功能,这使它们最适合图形数据,而对非图形数据则非常不利(尽管图形数据库可以是SQL数据库中的组件)。NoSQL数据库在检索和操作数据方面的能力受到更多限制。

接下来是您对ACID属性的感觉:原子性,一致性,隔离性和耐久性。SQL数据库为所有4提供了有力的保证。NoSQL数据库通常不承诺所有4,并且它们的离开方式是区分各种NoSQL数据库实现的关键区别之一。另一方面,无法在面对分区时保证一致性和可用性(请参阅Brewer的CAP thorem),因此,如果您坚持在面对分区时保持完全可用性,则SQL数据库将无法工作。就我个人而言,我非常关心数据库中数据的持久性,因为我通常使用的数据即使丢失0.0001%的数据也是不可接受的,并且数据集足够小,因此我不必担心分区,所以我非常喜欢SQL数据库。

另一个非常实际的考虑因素是服务器代码的质量,数据库管理员和程序员的可用性,对出现的问题可用的支持的质量,将应用程序连接到数据库的接口库的质量和可用性,等等。MySQL已经存在了将近20年,已经解决了绝大多数错误,得到了广泛的应用,因此它具有强大的支持能力和丰富的人员可用性,并且很可能在未来10年得到支持。您不能说任何有关Riak的事。

请注意,尽管Google实际上发明了NoSQL数据库,以便它们可以存储整个万维网的缓存和索引版本,但它们在某些方面仍使用MySQL。


1
我知道我提出了很多要求,所以一般的回答就可以了。核心问题是:(1)当您可以使用范围分片在逻辑中实现水平分片时,为什么要使用文档数据库进行所谓的大分片?(2)您将如何设计可在FourSquare方案中使用的文档数据库,以及该数据库如何处理一些常见用途(显示用户签入,显示用户朋友,显示当前签入位置的用户)?
2012年

1
@William,有许多文章可以通过Google轻松回答您的问题。仅堆栈溢出就有几个。做你的作业。
旧版专业版,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.