最近,我在业余时间一直在使用 Couch DB 进行大量工作,并且非常喜欢使用它。我发现它比使用关系数据库灵活得多,但也不是没有缺点。
一个很大的缺点是缺乏动态查询/视图生成......因此,您必须做大量工作来规划和证明您的视图,因为您不能像使用 SQL 那样将逻辑放入应用程序代码中.
例如,我基于一个 JSON 文档模板编写了一个登录方案,看起来有点像这样:
{
"_id": "blah",
"type": "user",
"name": "Bob",
"email": "bob@theaquarium.com",
"password": "blah",
}
为了防止创建重复帐户,我编写了一个非常基本的视图来生成用户名列表以作为键查找:
emit(doc.name, null)
这对我来说似乎相当有效。我认为这比拖出整个文档列表(甚至只是减少每个文档的字段数量)要好得多。所以我做了完全相同的事情来生成一个电子邮件地址列表:
emit(doc.email, null)
你能看出我要问这个问题吗?
在关系数据库(使用 SQL)中,只需对同一张表进行两次查询。这种技术(将视图等同于 SQL 查询的结果)会在某种程度上类似吗?
然后是性能/效率问题......这两个视图真的应该只是一个吗?还是使用带有键且没有关联值的 Couch DB 视图是一种有效的做法?考虑到上面的示例,这两个视图都将在登录方案之外使用......如果我需要生成用户名列表,我可以在没有额外开销的情况下检索它们。
你怎么看?