Mongodb 在单个应用程序中使用多个数据库类型对数据建模
将应用程序的数据模型分解为不同的数据库系统有意义吗?例如,应用程序将所有用户数据和关系存储在图形数据库中(非常适合存储关系),而将其他数据存储在文档数据库中,例如CouchDB或MongoDB?这将要求用户图形数据库引用文档数据库中的唯一ID,反之亦然Mongodb 在单个应用程序中使用多个数据库类型对数据建模,mongodb,neo4j,graph-databases,polyglot,nosql,Mongodb,Neo4j,Graph Databases,Polyglot,Nosql,将应用程序的数据模型分解为不同的数据库系统有意义吗?例如,应用程序将所有用户数据和关系存储在图形数据库中(非常适合存储关系),而将其他数据存储在文档数据库中,例如CouchDB或MongoDB?这将要求用户图形数据库引用文档数据库中的唯一ID,反之亦然 这是否使数据模型和应用程序过于复杂?或者,这是使用这两种数据库系统的最佳用途来扩展应用程序的吗?这肯定是有意义的,并且完全取决于应用程序的要求。如果您可以使用其他数据库系统来处理他们真正擅长的事情 以全文搜索为例。当然,您可以使用关系数据库(如M
这是否使数据模型和应用程序过于复杂?或者,这是使用这两种数据库系统的最佳用途来扩展应用程序的吗?这肯定是有意义的,并且完全取决于应用程序的要求。如果您可以使用其他数据库系统来处理他们真正擅长的事情 以全文搜索为例。当然,您可以使用关系数据库(如MySql)进行或多或少复杂的全文搜索。但也有像Lucene/Solr这样的系统,它们针对这些事情进行了优化,可以在数百万文档中快速搜索。因此,您可以将这些系统用于他们的特殊任务(这里:进行漂亮的全文搜索),然后返回标识符,并可能从RDBMS加载关系结构化数据
或者CouchDB。我在一些项目中使用couchDB作为缓存系统。与关系数据库结合使用。当然,我需要关注一致性,但这绝对值得付出努力。它大大提高了项目的性能,并将服务器上的负载从2降低到了0.2.:) 例如,类似这样的东西称为跨存储持久性。正如您提到的,您将在关系数据库中存储某些数据,在graphdb中存储社会关系,在文档db中存储用户生成的数据(文档),在blob存储中存储用户提供的多媒体文件(图片、音频、视频),如S3 它主要是关于查看用例,并确保您可以从任何需要的地方访问每个存储的“主”或索引键(来回)。您可以将实际查找封装在域或dao层中
一些框架(如项目)提供了一些初始类型的现成的跨存储持久性,主要是将JPA与不同的NOSQL数据存储集成在一起。例如,允许它将您的实体存储在JPA中,并将社交图或其他高度互联的数据添加为一个数据库,并利用graphdb进行典型的遍历和其他图形操作(例如排名、建议等)。另一个术语是多语言持久性 在这个问题上有两种相反的立场: 赞成者: “与此相反,我是polyglot persistence的忠实粉丝。这仅仅意味着为您的每个用例使用正确的存储后端。例如文件存储、SQL、图形数据库、数据仓库、内存数据库、网络缓存、NoSQL。现在使用的存储主要有两种,即文件和SQL数据库。这两种存储并不是每种用途的最佳选择案例。”