Database design 将SQL结构移植到NoSQL MongoDB或CouchDB

Database design 将SQL结构移植到NoSQL MongoDB或CouchDB,database-design,nosql,Database Design,Nosql,我试图弄明白如何在文档存储系统(如或)中设计数据存储 我不再在查询中使用JOIN,而是坚持搜索具有符合我的条件的特定索引的行。例如,我可能会查找最近的评论(orderbydate)或所有活动用户(,其中status=1)。换句话说,我的搜索逻辑都基于存储在RAM中的索引int列 转到NoSQL,这里似乎没有任何索引,所以我试图找出这些数据库过滤结果,而不必手动查看每一行。 更新:不知怎的,我错过了这个: 至于设计,使用将包含所有注释的帖子存储为一个文档的示例,在逻辑上似乎并不合理。你觉得最近的评

我试图弄明白如何在文档存储系统(如或)中设计数据存储

我不再在查询中使用JOIN,而是坚持搜索具有符合我的条件的特定索引的行。例如,我可能会查找最近的评论(
orderbydate
)或所有活动用户(
,其中status=1
)。换句话说,我的搜索逻辑都基于存储在RAM中的索引int列

转到NoSQL,这里似乎没有任何索引,所以我试图找出这些数据库过滤结果,而不必手动查看每一行。 更新:不知怎的,我错过了这个:

至于设计,使用将包含所有注释的帖子存储为一个文档的示例,在逻辑上似乎并不合理。你觉得最近的评论怎么样?或者你会如何找到某个用户的评论

我可以去哪里学习如何转换模式(以及我的思维方式),以便使用这些文档数据库构建应用程序?

更新:
我想我只是没有花足够的时间浏览MongoDB网站。似乎涵盖了所需的大部分内容,如使用索引筛选结果,就像在sql中一样。而且,这正是我所需要的。

实际上,与其说没有索引,不如说没有默认索引。使用SQL,如果不创建索引,搜索速度会很慢。对于大多数NoSQL系统,如果不创建索引搜索,根本不会发生。用于索引的方法取决于您使用的特定系统-有时您使用搜索引擎索引文档,有时它存储每个可能值的ID集

我本人不同意将评论存储在帖子文档中-将评论作为单独的文档按帖子id进行索引更为灵活。但是,如果您不关心其他查询(并且您的平台支持部分更新)单个文档是最简单的解决方案-正确的结构完全取决于您想用它做什么

您找不到任何通用的模式转换方法,因为没有一个正确的答案。我认为最好的方法是考虑应用程序而不是数据——如果你的sql博客应用程序正在读取多个表并创建一个post对象,那么你知道你应该有一个post文档

您还应该尝试考虑运行查询以外的解决方案,以利用NoSQL平台中的功能—例如,对于redis,我会将最近的注释作为一个列表来实现,该列表在每次添加注释时都会更新和修剪。实际上,它是一个非常专业化的索引—比检查系统中每个注释的日期要高效得多,并且当您不需要担心更新模式时,添加更多键/数据类型也不是问题