--- 更新 ---
感谢到目前为止的评论和帮助。我很抱歉没有进一步说明这个问题。我已经更新了下面的问题。
- - 更新 - -
目前,我被要求为大量数据开发数据库结构。我在实现图形数据库而不是“普通”关系数据库之间进行辩论,并且想知道如果数据不一定包含任何关系有什么缺点?可以像表中的表/行一样使用单独的、未连接的节点吗?
我问这个是因为到目前为止不需要关系,但我正试图在未来证明数据库(预期关系)以扩展数据的能力。如果有任何帮助,我正在 OrientDB/Neo4j 或 mySQL/postgreSQL 之间进行辩论。
一个例子:
假设我们有一个充满股票的数据库。任何人几乎可以在任何时间/一天买卖股票(只要市场开放)。现在这个数据库可以是一个普通的关系数据库:Table 1: IDs | Products | Prices | Sizes | Dates
. 但也可能被组织为关系数据库Node 1: Stock A | Node 2: Stock B
。
如果我只是使用数据库来存储股票信息,在我看来,一个普通的数据库会更好。但这是真的吗?它会对我使用关系数据库产生负面影响/使用普通数据库会更好吗?在节点而不是行中组织我的数据是否有缺点?
一张图说明一切:
该数据库将主要用于买卖类似股票的产品,但它们也有其他信息,例如附加的位置。我试图预测功能的实现,例如推荐产品,甚至预测某人将购买的下一个产品。
来自数据库的大多数查询将针对每个产品。
从数据库中提取:每天 100 到 1000 次。
推送到数据库:每天 20.000。
一个可能揭示缺点的附加问题:
从关系到图或从图到关系有多容易。有锁定危险吗?
感谢所有的帮助,到目前为止评论都很棒!R
我认为您在这里犯了一个相当常见的错误,即选择 NoSQL 技术以便在不了解权衡的情况下“面向未来”。如果有疑问,请从 PostgreSQL 开始,并认为您可以随时根据需要设置图形数据库或其他 NoSQL 数据库。您也可以在 PostgreSQL 中进行图形遍历,但请记住您正在使用集合,因此这与具有不同优点和缺点的图形数据库非常、非常不同。
您的基本权衡是在数据输入的灵活性和灵活利用输出数据的能力之间。NoSQL 数据库(包括图形数据库)为前者牺牲了后者,因为您经常需要对数据集运行临时查询的能力,您可能希望在某处使用 RDBMS。这意味着如果您有一个好的数据模型,您应该能够将附加数据库服务器添加到您的环境中,以用于您的 RDBMS 无法处理的特殊用途。
尽管如此,如果您考虑在某些时候添加各种 NoSQL 解决方案,为什么我会建议从 PostgreSQL 而不是 MySQL 开始,有几个具体原因,这些与 NoSQL 友好数据库结构的性能和 PostgreSQL 支持的事实有关WITH RECURSIVE 公用表表达式。这种方法(使用递归 CTE)允许使用可以重复遍历路径的递归 SQL 语句来遍历层次结构和图形等内容。这些对于基于集合的方法也相对有效,因此如果您最终遇到很多零件/子零件建模问题,您可以直接在 PostgreSQL 中完成,而无需太多工作。但是,如果这不起作用,您还可以更轻松地以更容易导入 NoSQL 数据库的方式表示数据。因此,它可以让您走得更远,并且可以更好地集成。您甚至可以针对您的 NoSQL 数据库设置外部“表”并从 Pg 内部对其运行查询!
更多关于权衡 1
图数据库源于对大量信息进行快速二进制遍历的需要。一个明显的例子可能是像 LinkedIn 这样的社交网站,它可能想快速告诉你你与另一个用户的距离有多远(简单来说,这意味着它们本质上是为了玩“六度凯文培根”而设计的)。通常在图形数据库上,您实际上是使用通常被描述为代表图形的“三词句子”来遍历节点。在这方面,您本质上是在查看类似“Johnfriended Jane”之类的内容并以这种方式遍历。通常,API 是相对导航的。
关系数据库实际上是为处理信息集而设计的。通常在放弃关系数据库时,也会放弃集合操作。这可能是一件大事。通常,能够执行集合操作而不是导航、聚合和报告,在操作上和开发时间方面都更快。这是一个巨大的差异,如果您的用例适合关系工作流,我很难想象图形数据库会帮助您。
更多关于权衡 2:一致性模型
要调查并记住的第二件事是您的数据库使用什么一致性模型的问题。即使使用“ACID-Compliant”RDBMS,也有一系列基于不同级别事务隔离的一致性模型可用于防止问题。如果您的数据很重要,那么标准的 RDBMS 一致性模型将比大多数 NoSQL 模型表现得更好,因为它们为 DBA 和应用程序提供了更多的保证。图数据库是一个比较大的领域,各个厂商的一致性模型可能会有一些差异。这不一定会排除使用的可能性,但在考虑整体解决方案时需要谨慎。
请注意,模式灵活性在 NoSQL 世界中既是福也是祸,这也会影响图形数据库。这是一种祝福,因为您可以在初始阶段更快地启动和运行,但它是一种诅咒,因为 RDBMS 的集合操作强度依赖于固定模式,并且在一定程度上放松了这种模式(例如 Informix,支持返回集中的锯齿行)需要程序员了解这些要求已放宽的地方。