我目前的项目本质上是一个工厂文件管理系统的运行。
也就是说,有一些皱纹(惊喜,惊喜)。虽然有些问题是项目特有的,但我相信有一些普遍的观察结果和问题没有规范的答案(无论如何我可以找到)并且适用于更广泛的问题领域. 这里有很多,我不确定它是否适合 StackExchange Q&A 格式,但我认为它 a) 一个可回答的问题和 b) 不够具体,它可以使社区受益。我的一些考虑是特定于我的,但我认为这个问题对任何面临决定 SQL 还是 NoSQL 还是两者的人都有用。
我们正在构建的 Web 应用程序包含本质上具有明显关系的数据以及面向文档的数据。我们想吃蛋糕,也想吃。
TL;DR:我认为下面的 #5 通过了气味测试。你?有没有人有将 SQL 和 NOSQL 集成到单个应用程序中的经验?我试图在下面列出解决此类问题的所有可能方法。我错过了一个有前途的替代方案吗?
从本质上讲,它是关系数据(您的典型 Web 应用程序内容,如用户、组等,以及我们需要能够实时对复杂查询进行切片和切块的文档元数据)和文档数据(例如我们没有兴趣加入或查询的数百个字段 - 我们对数据的唯一用例将是显示输入的单个文档)。
我想对我的首选方法进行完整性检查(如果你检查我的发帖历史,我非常明确地说明我不是 DBA),并列举我遇到的所有选项供其他人解决涉及关系和非关系数据的广泛相似的问题。
1. 每个文档类一张表
每个文档类都有自己的表,其中包含所有元数据和数据的列。
好处:
缺点:
目前是否计划标准化一种限制查询返回结果数量的最佳方法?
是否有 ANSI SQL 替代 MYSQL LIMIT 关键字的堆栈溢出问题?列出了用不同语言处理这种行为的各种方法:
DB2 -- select * from table fetch first 10 rows only
Informix -- select first 10 * from table
Microsoft SQL Server and Access -- select top 10 * from table
MySQL and PostgreSQL -- select * from table limit 10
Oracle -- select * from (select * from table) where rownum <= 10
Run Code Online (Sandbox Code Playgroud)
我不经常玩数据库,所以我在这里说的是无知,但似乎这是一个非常重要的功能 - 至少足够重要,当我看到它被留给供应商时我会挠头。