【问题标题】:Which database is best to work with graphs and tree structured data?哪个数据库最适合处理图形和树状结构数据?
【发布时间】:2013-01-31 16:35:03
【问题描述】:

我计划与 Dapper.NET 合作开发一个家庭网站。

结构中会出现很多树状数据。 哪个数据库提供了处理循环/非循环树关系的最佳查询?

我想知道分层查询的易用性和性能比较。 IE。如 SQL Server 中的 CTE、Oracle 中的 Connect By/Start with 等。

对于这类树状结构数据,dapper 是作为 Micro ORM 的最佳选择吗?

在为此选择正确的数据库和正确的 Micro ORM 时,我需要意见。

对不起,我的英语不好。

【问题讨论】:

  • 您期望有多少数据?我问这个是因为你说这是一个家庭网站,所以我想这将是一个很小的数据库,在这种情况下任何事情都可以做。其实你最习惯的就是你最好的选择。
  • 实际上我正在计划将它用于公共访问,就像一个社区。所以它会包含很多家庭的信息..

标签: database graph tree hierarchy dapper


【解决方案1】:

我的问题仍然存在:您期望有多少数据?

但除此之外,它不仅是您为数据选择的数据库类型,还有表结构。层次树可以根据您的需要以各种不同的方式存储。

表结构

特定结构在遍历读取时可能非常快,但在插入/更新时可能会很慢(即nested sets),其他结构(邻接列表)则相反。对于 99:1 的读:写比率(当今的绝大多数应用程序读取远多于写入),我可能会选择具有左、右、深度和父级的修改后的嵌套集结构。这为您提供了读取场景的最佳可能性。

数据库类型

除非您的目标是海量数据,否则我建议您使用您最了解的任何 SQL 数据库(MSSQL、MySQL、Oracle)。但是,如果您的数据库将包含大量层次结构节点,那么使用 specialised graph-oriented database 调情可能是更好的选择。

8000 万个节点

如果您选择修改后的嵌套集解决方案(也使用负值,因此插入/更新一半的更新次数),您将拥有具有left 的层次结构表。 rightIDParentID 列将产生大约 1.2 GB 的表。但这是您使用至少两年后的最高估计。

我的建议

轻装上阵 - 如果事实证明根本不需要,不要过度设计,使用最好的数据库来存储您的层次结构。因此,我建议您最初使用关系数据库,这样您就可以快速进入市场,即使解决方案在数百万条记录后开始挣扎。但在您的数据库开始出现问题之前(我们在这里讨论的是几年),您将获得两件事:

  1. 您将首先看到您的产品是否会起飞(已经有很多家谱服务),因此您不会投资学习新技术;因为您将使用经过验证且受支持的技术,从而让您快速进入市场
  2. 如果您的产品确实成功(我真的希望成功),它仍然会给您足够的时间来学习和实施不同的存储解决方案;有了适当的代码层,以后在需要时切换存储应该不难

【讨论】:

  • 我正在规划大约 8000 万条用户记录以及他们的关系和家庭层次结构。它可能更多,因为它涉及大量的家谱数据。我正在计划这样的结构:关系类型(父亲、儿子、妻子、堂兄、兄弟等)的表,每个用户详细信息的表,家庭及其分支的另一个表。还有另外两个链接表,它们将成员之间以及家庭与其成员联系起来。大多数托管服务器都没有专门的图形数据库。所以我喜欢从标准数据库中选择一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2013-11-10
  • 2011-05-18
  • 2021-03-17
  • 2015-06-10
相关资源
最近更新 更多