【问题标题】:Design of NO SQL DatabaseNOSQL数据库的设计
【发布时间】:2012-02-20 19:34:51
【问题描述】:

作为一个培训项目,我正在尝试在 Azure 上构建一个家谱应用程序。

第一步是数据库,我打算用表存储。

家庭树应用程序的表存储设计是什么样的?

我有几个解决方案。

  • 每人一个条目,带有包含该人所有关系的 xml。但这意味着要为给定的更改更新几行以及大量重复数据。
  • 每种类型的信息一个表,一个人的,一个关系的......但这感觉就像一个关系数据库

【问题讨论】:

    标签: database-design azure nosql azure-table-storage


    【解决方案1】:

    我会为每个家庭构建一个分区,每个人一行,因此对于每个人,分区键将是家庭,行键是此人的标识符。每个人都为父母设置一个属性(通常只有两个:))。这样,您可以快速将整个分区读入内存并使用内存中的树结构遍历图形。一个典型的家庭应该有不到一百个节点,所以会快如闪电。更新总是针对一个族,因此可以使用事务,因为每个族都在一个分区中。

    对于一个非常困难(相关)的练习,在键值存储(表存储)之上实现一个图形数据库(如您的家谱)。想想 twitter 或 facebook 的问题,您需要查看所有关系(社交图)的更新(推文、新闻)。然后,您开始进入 NoSQL 的有趣(困难)部分。

    【讨论】:

      【解决方案2】:

      我的第一个问题是您打算如何访问这些信息?考虑如何构建数据访问它的方式。不要回避打破过去 20 年来我们所接受的正常化规则。采用冗余的专业模型。还要开箱即用,考虑使用并行查询。如果数据存储在多个位置,请同时跟踪每个位置并汇总结果。

      最后,以预定义的显示格式存储一些数据。赔率是您的家谱信息主要被阅读,因此有优化的“视图”。也许当您找到要显示的人时,那里有一个 XML 文件,可以提供所有可供查看的数据。

      【讨论】:

        【解决方案3】:

        鉴于家谱应用程序与实体之间的关系比实体本身更多,因此在关系数据库中对其进行建模会更合适。

        我发布这并不能回答您的问题,但最终我们需要为任务选择最合适的工具。

        【讨论】:

          猜你喜欢
          • 2012-12-08
          • 2020-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-23
          • 2022-11-14
          • 2019-01-03
          • 1970-01-01
          相关资源
          最近更新 更多