2010-08-12 55 views
3

我有大数据集,我想查询。查询不会更改,但底层数据会。从我阅读的内容中,我可以构建一个“视图”并对其进行查询。另外,我读到Couch DB知道如何在数据更改时更新视图,因此我认为再次查询视图仍然很快。速度,CouchDB的意见和替代

我的问题是,我是否正确理解CounchDB的观点?我不需要CouchDB的任何其他功能,我甚至不需要SQL,我只需要快速查询数据。我可以使用别的东西吗?如果我会使用比较好的旧MySQL,它会比CouchDB慢(请阅读:在上述情况下,各种DB如何执行?)。

回答

1

我不认为任何人都可以根据您提供的信息回答您的问题。

关系数据库中的索引类似于CouchDB视图。在这两种情况下,它们都存储一个预先排序的数据实例,并且数据库将该实例与规范化数据保持同步。这两种类型的数据库都透明地使用索引/视图来加速对索引/视图设计的表单的后续查询。

没有索引/视图,查询必须扫描整个n记录的数据集合,并且它们在O(n)时间内执行。当查询受益于索引/视图时,它会在O(log n)时间内执行。

但是,这是关于数据量的性能曲线非常广泛的说法。给定的数据库在某些情况下可以具有如此快速的性能,以至于无论如何它都可以超越其他产品。很难概括说明品牌X总是比品牌Y更快。要确定具体案例的唯一方法是在两个数据库中尝试这种情况并衡量其性能。

+0

我知道索引是预先分类的(即O(log N)),但我认为视图会自动填充新更新的数据,所以根本没有搜索。换句话说,我认为视图与索引非常不同,表现如何......顺便说一句,你说我提供的信息不够多,请问你能更具体些吗?像数据量?我还认为查询保持不变并且数据更改比任何其他更重要...... – 2010-08-12 22:47:39

+1

哪个产品具有最佳性能取决于您的特定查询以及您定义的索引/视图。这就是我没有足够的信息。每个产品都有其优点和缺点,因此只有在知道需要优化哪些查询后才能进行优化。 – 2010-08-12 23:08:14

+0

另外:如果索引包含结果中需要的所有列,则可以使用索引来避免搜索。这被称为*覆盖索引*。当然,在许多RDBMS品牌中,您一次只能为一个表中的列定义索引,因此它可能不如CouchDB视图的通用性。 – 2010-08-12 23:10:14

2

您的评估是完全正确的。请享用!

值得一提的唯一性能技巧是,如果您从视图中需要所有数据并从不使用?include_docs功能,您可能会看到一个提升,因为include_docs会导致CouchDB返回到主数据库并检索导致该视图行的原始文档。换句话说,你可以将emit()所需的所有东西放到你的视图索引中(空间更大但速度更快),或者你可以使用参考返回原始文档(空间更小但速度更慢)。