【发布时间】:2011-02-24 00:37:41
【问题描述】:
在 RDBMS 中,您可以声明类型(表)和子类型(具有超类型 FK 的子类型表)。在 Rails 中,这将是类表继承。例如,您可以有 Person 表和 Friend 子类型表,其中包含有关此人的更多个人详细信息(例如生日/周年纪念日)。
当您进入 NoSQL 世界并使用像 MongoDB 这样的文档数据库时,实现子类型会容易得多,因为集合是无模式的。这是创建 CMS 的理想选择。您现在可以动态键入任何内容。事实上,一个事物可以是多类型的,具有它所有类型的属性。也不是太棘手。
但这是棘手的部分。你想索引你的动态类型的东西(例如你的“东西”集合)。您想按 start_date 搜索 Event 事物。您想按名称搜索 People 事物。您想按生日搜索朋友的东西。当您不动态输入内容时,这些类型中的每一种都会有自己的集合。将事件、人、朋友作为动态类型的事物进行索引是很困难的。将事件、人物、朋友作为类型(表格或集合)进行索引并不难。
在我看来,MongoDB(和其他无模式数据库)是为动态类型而设计的。至少,在大多数方面。但是当涉及到索引动态类型的东西时,它就达不到要求了。您已经/将如何解决这个问题?
我想如果 MongoDB 引入filtered indexes,我们就会在那里。 (过滤索引以多键和稀疏索引无法解决的问题。)唯一需要的另一件事是可能无限数量的索引(因为我们可以让用户创建许多自定义类型)。如果没有无上限的索引数量,这将限制此类数据库可以处理的类型数量。
如果您同意过滤索引可以解决动态类型问题,请vote in support。
这个问题简化并澄清了a question I asked earlier。也是从另一个角度来看待问题的。
【问题讨论】:
-
使用过滤索引可以很好地处理这种事情:bret.appspot.com/entry/how-friendfeed-uses-mysql
标签: ruby-on-rails mongodb database-design nosql