我看过MongoDB / norm(但想要一个面向文档的常规商店答案)。使用起来似乎非常好,我有兴趣知道何时应该使用它而不是RDBMS + ORM?
例如,我应该使用什么:
(我发布了另一个更普遍的question,但它得到了一个可能对其他人感兴趣的精彩答案,因此是新问题)
答案 0 :(得分:2)
您提到的所有示例都可以使用文档存储构建。您是否应使用它,取决于具体要求。
如果您正在与支持货币交易的社交社区打交道,那么您真的应该使用RDBMS来处理这些交易。你根本无法承受这方面的不一致数据。
如果您的应用程序在数据一致性方面没有非常严格的要求,您可以考虑使用文档数据库。它比RDBMS有几个优点。例如,如果您使用domain-driven design构建应用程序,则会发现聚合根可以自然地存储为单个文档。这将导致实体中的数据碎片非常少,从而在跨多个节点分片数据时提供更好的性能。
某些驱动程序(包括MongoDB的NoRM)支持类型识别器。这些允许您使用非常少的配置来持久化和补充多个子类。例如,如果您的应用程序支持多种类型的家庭地址,则驱动程序将负责处理不同的地址子类型。您还可以添加新的子类型,驱动程序也会自动处理这些子类型。有关详细示例,请参阅this article。
如果没有面向文档的商店优于SQL数据库的最大优势,上述情况是不可能的:无架构数据。如果您正在处理用户定义的数据,那么文档数据库就是您的选择。例如,如果您允许用户上传文件并使用他们想要的任何数据自由标记文件,您可以轻松地将这些标记存储为普通键值对,甚至是用于分类标记的嵌套键值结构。