【问题标题】: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】:
鉴于家谱应用程序与实体之间的关系比实体本身更多,因此在关系数据库中对其进行建模会更合适。
我发布这并不能回答您的问题,但最终我们需要为任务选择最合适的工具。