CouchDB 文档建模

CouchDB Document modelling

[TLDR] CouchDB 是否缓存并重用 map/reduce 函数的结果用于未修改的文档?

背景资料: 在我的销售点 (POS) 应用程序中,所有交易都被记录下来并创建了单独的文档。

{ "_id": "sale_transactions_1234124", "Quanity Added": 0, "Quanity reduced": 10, "Is Discarded": "false", "saleid": "sales_523" }

{ "_id": "Purchaseorder_transactions_1234124", "Quanity Added": 5, "Quanity reduced": 0, "Is Discarded": "false" , "purchaseid": "purchase_2352"}

每当修改库存时,相关文档都会创建为 transactions 它是 _id 字段。因此,不是将 Total sold, Quantity in hand 存储在 Item 文档中,而是计划创建 map reduce 视图以每次检索。

每次我做销售的时候,Quantity in hand map reduce 函数应该被调用,检查数量是否大于零。对于这种方法,我会遇到任何性能问题,还是您建议在 Item document

中创建 Total sold, Quantity in hand

所以每次我们调用map reduce函数时,couchdb是如何缓存未修改的文档结果并处理新的和修改的文档,还是每次都处理所有文档?

是的,CouchdDB 会缓存您的 map/reduce 文档。因此,如果您多次查询同一个视图,Couch 将为您提供缓存版本。如果将其他数据集添加到数据库中,Couch 将更新视图。

要查看 Couch 缓存视图,您可以尝试在包含大量文档的数据库上创建新视图:

  1. 第一次调用视图,您会发现需要一些时间才能得到结果。
  2. 再次调用您的视图,它会立即准备就绪。
  3. 向您的数据库添加一些新文档
  4. 调用您的视图,即使不是立即,也会很快准备就绪。
  5. 向您的数据库添加大量新文档
  6. 再次调用您的视图,这将比您刚刚添加几个新文档时花费更多时间。但是建好之后马上就可以了。