我有3种类型的实体:
- 主题 *
- 主题 *
- 责任 *
每个 * 主题 * 中有 * 主题 * 和 * 任务 。 主题 * 可以相互依赖。(当然,属于 * sj 1主题 * 的 * 主题 * 只能依赖于也属于 * sj 1主题 * 的另一个 * 主题 *。)
在 * 任务 * 和 * 主题 * 之间存在着联系(也必须属于同一个主题),这些联系象征着这样一个事实,即要解决某个 * 任务 *,我们需要了解某些 * 主题 *。
因此,一个 task 可以要求更多的 topics。同样,一个 topic 可以被更多的 * task * 要求。(N <--->M连接。)
什么是最好的存储解决方案?
- 解决方法
- 每种类型的实体有3个集合
- 在 tasks 和 topics 中,有一个主题标识符属性的索引。
- 以及用于存储 * 主题 * [N] [M] * 任务 * 之间的连接的边集合<-->
- 解决方法
- 科目 * 有1个收款
- 对于每个 * 主题 ,有1个 * 主题 * 和1个 * 任务 * 集合。 主题 * 和 * 任务/主题 * 之间的连接可以基于集合名称的前缀。(即对于 * 化学 * 主题,我们有 * 化学_任务 * 和 * 化学_主题 * 集合)
- 对于每个 * 主题 *,具有 * 任务 * 和 * 主题 * 之间的连接的边集合以及主题之间的连接的另一个边集合(即 chemistry_topics_tasks_connections 和 chemistry_topics_connections)
这样,如果我想在一个主题的主题或任务中进行搜索,我不需要根据主题标识符索引对它们进行预过滤。我会立即得到包含我所有数据的所需集合。而且,我不会为 tasks 和 topics 中的每个文档建立索引。另一方面,这会导致集合混乱。
侧记:最多有50个科目,但任务和主题的数量是无限的。
1条答案
按热度按时间cotxawn71#
用你的话来说,“感知”是通过“图”产生的,它不需要额外的索引就能达到最佳效果。ArangoDB自动创建特殊的“_key”和“_from/_to”索引,用于图的遍历。
但至于索引,这是所有搜索性能的关键--索引是根据您要查找的数据添加的。这实际上取决于您希望如何搜索:
**拥有大型集合并不会造成损失,**而且图表可以链接单个集合中的文档--不需要将它们隔离。此外,您可以拥有多个边缘集合和/或多个文档集合。这些概念对我们这些像我一样的人提出了挑战:来自传统RDBMS -“无模式”或“多模型”数据库有点颠覆了规范化。
就我个人而言,我选择基于数据源构建相当大的集合(我从外部源导入了一个数据)。每个集合都包含多个对象/数据架构的文档,这些文档由一个
objType
属性标识。(或者甚至是具有多个字段的索引,如title
+objType
),可以非常快速地减少要迭代/遍历的文档集- * 这 * 通常是真实的提高性能的地方。所以...我想我推荐 * 解决方案#3*?