【发布时间】:2015-04-30 19:29:18
【问题描述】:
每次我考虑使用 NoSQL 作为解决方案时,我总是对缺乏丰富的查询功能感到困惑。我认为这很可能是我对 NoSQL 缺乏了解。这也可能是因为我对 SQL 非常熟悉。据我了解,NoSQL 确实非常适合简单的模式场景(因此它可能不适用于拥有 50 多个表的关系数据库)。即使对于琐碎的场景,我似乎总是想要丰富的查询功能。让我们以食谱数据库为例。
虽然该方案无疑是微不足道的,但您肯定需要丰富的查询能力。您可能希望通过以下(以及更多)搜索:
- 标题
- 标签
- 类别
- 身份证
- 喜欢
- 创建食谱的用户
- 创建日期
- 评分
- 饮食限制
您还希望将这些条件组合成您想要的任何组合。虽然我知道大多数 NoSQL 解决方案都有二级索引,但这种类型的查询能力是否严重限制了 NoSQL 与多少解决方案相关?我通常需要这种丰富的查询能力。另一个很好的例子是错误跟踪应用程序。
我不认为您每次想要搜索数据库时都想启动 map reduce 工作(我认为这类似于大多数时间在传统关系模型中进行表扫描)。所以我假设会有很多查询,你必须遍历每个实体并寻找你想要搜索的标准(这可能会很慢)。我知道您可以每晚运行 map reduce 作业来分析数据或将其规范化为典型的关系数据库结构以用于报告。
现在我可以看到它对于您很可能总是必须读取所有数据的场景很有用。想想网络服务器日志或物联网类型的应用程序,您可以在其中收集大量数据(如审查收集)并进行夜间分析。
那么,对 NoSQL 的理解是否存在问题,或者我可以很好地处理的场景数量是否存在限制?
【问题讨论】:
-
nosql 数据库不仅仅是为了拥有一个数据库。这是为了有目的地存储东西。 noSQL 的全部好处是使查询更容易。阅读胜过写作。这意味着,如果您难以查询,您的设计可能很糟糕。
-
@cdbajorin 我认为您的评论并没有真正解决这个问题。它如何使它更容易?如果你擅长 sql 查询是很容易的。对于我给出的示例,查询将是微不足道的。即使它是“EASIER”并不意味着它“Fast”。在上面的示例中,用户很可能会混合并匹配条件以按他们想要的任何组合进行搜索。如果每秒执行 1000 次这样的查询,如何对你来说“设计”它要快。很可能每个查询都需要你接触每个文档,如果你有千兆/兆字节的数据,性能就会提高。