我正在构建一个流量跟踪应用程序。我最终使用CouchDB存储所有流量日志,应用程序可以根据用户的查询和自定义数据动态创建视图。
我想创建数千个(或可能高达数百万)的视图。 有限制吗?太多观点会影响CouchDB的表现吗?
答案 0 :(得分:4)
视图数量没有硬性限制。我会推荐一些东西:
首先,在许多设计文档中分割您的视图。我的第一个想法是每个用户1,但你可以根据你实际拥有的视图进一步细分它们。
视图由设计文档在内部分组,这会影响它们的重建时间,存储位置等。因此,保持分区关闭将有助于防止1个用户的视图影响任何其他用户的性能。
此外,如果不定期压缩数据库,每个文档(包括设计文档)都会在不同的写入中保留旧副本,这是CouchDB使用如此多磁盘空间的原因之一。 (它使用更多磁盘空间进行交易以便快速写入)
其次,非常保守,你的视图中的emit()
值。避免像emit(key, doc)
这样的事情。如果在视图中发出整个文档,它将被视为视图索引的一部分(与主数据库索引分开存储)并创建文档的多个副本。如果您需要在视图中访问源文档,则应使用include_docs=true
。
根据具体情况,您可能还需要考虑跨多个数据库进行分区。这可能是不可能的,这取决于你想如何编写查询等等,但值得一提。如果您可以分区到数据库,这将使创建备份更容易,并且从长远来看可能会更好地扩展。
重点是,CouchDB 非常灵活,这是我最喜欢的事情之一,因为它将权力作为开发人员掌握在你手中。