我计划在一个项目中使用 CouchDB。但是由于查询机制涉及编写视图(很像常规 RDMBMS 上的索引),我想知道,如果文档数据库不断更新(写入繁重的数据库),与常规 RDBMS 相比,CouchDB 会表现得更好吗?或者我们是否必须偶尔压缩/重新索引系统以使其执行得更快?
问问题
880 次
1 回答
3
您可能会以这种方式考虑 CouchDB 视图模型的优缺点。(CouchDB 黑客可能不同意,但 IMO 对用户来说已经足够准确了。)
- 视图函数在首次创建时总是执行完整的“表扫描”(就像 RDBMS BTW 一样)
- 只要没有副作用,map和reduce函数可以任意复杂
- 每个文档和 map/reduce 结果都被缓存并且不再计算
- 如果您添加或更改文档,它将为该视图重新计算(并缓存)它(并且只有它)
鉴于这些,您可以得出关于 CouchDB 性能的一些结论:
- 整个数据集从来没有重新索引阶段,只是每个文档更新的增量
- 更改视图函数会强制重新构建整个索引
- 由于 CouchDB 和 RDBMS 都必须为新数据更新索引,因此可以合理地认为,对于大量更新/插入使用,性能将相似。
显然,YMMV 和标准的逃避,“你必须测试你自己的负载”适用。但是,我将添加更多注意事项。
- 我说 RDBMS 非常适合探索式查询数据。当您甚至不知道要从数据中提出什么问题时,您真的无法击败结构化的查询语言。
- 但是,一旦您定义了您想知道的内容,CouchDB(也许还有 Hadoop)会提供最丰富的查询系统,因为您只是在编写代码。
- 如果您的数据集很大,NoSQL 数据库将更容易扩展。例如,CouchDB-Lounge允许一组沙发进行并行处理。Hadoop 也是如此,所以它会归结为次要考虑因素:熟悉度、可维护性,CouchDB 是一个 Web 服务器,但需要更多的 DIY;Hadoop 以复杂性、外来性等为代价内化了更多的集群管理。
我希望这有助于阐明您的决定!
于 2010-05-18T08:35:53.747 回答