Couchdb 文档模式性能

Couchdb 文档模式性能,couchdb,Couchdb,我试图为couchdb(2.3.1)的项目确定最佳文档模式。在研究这一点时,我发现一些相互矛盾的信息,对于最新版本的couchdb和类似的场景,没有相关的指南。如果这些数据不适用于couchdb,或者不适用于下面详细介绍的方法,我想更好地理解原因 我的场景是跟踪小部件的制造细节: 必须跟踪100000-300000小部件类型 每种小部件每天制造200-1800次 小部件类型的制造可能会在一天内激增到约10000个 必须记录和更新每个小部件创建及其相关详细信息 小部件创建存储30天 按小部件类型和

我试图为couchdb(2.3.1)的项目确定最佳文档模式。在研究这一点时,我发现一些相互矛盾的信息,对于最新版本的couchdb和类似的场景,没有相关的指南。如果这些数据不适用于couchdb,或者不适用于下面详细介绍的方法,我想更好地理解原因

我的场景是跟踪小部件的制造细节:

  • 必须跟踪100000-300000小部件类型
  • 每种小部件每天制造200-1800次
  • 小部件类型的制造可能会在一天内激增到约10000个
  • 必须记录和更新每个小部件创建及其相关详细信息
  • 小部件创建存储30天
  • 按小部件类型和creationStartTime/creationEndTime查询小部件详细信息
  • 我不关心修订,如果这可能会提高性能,我可以更新并使用相同的版本
  • 方法1:

    {
        "_id": "*",
        "_rev": "*",
        "widgetTypeId": "1831",
        "creation": [{
            "creationId" "da17faef-3591-4579-b5f6-ff0a719a6da7",
            "creationStartTime": 1556471139,
            "creationEndTime": 1556471173,
            "color": "#ffffff",
            "styleId": "92811",
            "creatorId": "82812"
      },{
            "creationId" "893fede7-3874-44ed-b290-7001b4901bc9",
            "creationStartTime": 1556471481,
            "creationEndTime": 1556471497,
            "color": "#cccccc",
            "styleId": "75343",
            "creatorId": "3211"
      }]
    }
    
    {
        "_id": "*",
        "_rev": "*",
        "widgetTypeId": "1831",
        "creationId" "da17faef-3591-4579-b5f6-ff0a719a6da7",
        "creationStartTime": 1556471139,
        "creationEndTime": 1556471173,
        "color": "#ffffff",
        "styleId": "92811",
        "creatorId": "82812"
    },{
        "_id": "*",
        "_rev": "*",
        "widgetTypeId": "1831",
        "creationId" "893fede7-3874-44ed-b290-7001b4901bc9",
        "creationStartTime": 1556471481,
        "creationEndTime": 1556471497,
        "color": "#cccccc",
        "styleId": "75343",
        "creatorId": "3211"   
    }
    
    使用方法一会将我的文档创建限制为100000-300000个文档。然而,这些文件将非常高,并且经常更新

    方法2:

    {
        "_id": "*",
        "_rev": "*",
        "widgetTypeId": "1831",
        "creation": [{
            "creationId" "da17faef-3591-4579-b5f6-ff0a719a6da7",
            "creationStartTime": 1556471139,
            "creationEndTime": 1556471173,
            "color": "#ffffff",
            "styleId": "92811",
            "creatorId": "82812"
      },{
            "creationId" "893fede7-3874-44ed-b290-7001b4901bc9",
            "creationStartTime": 1556471481,
            "creationEndTime": 1556471497,
            "color": "#cccccc",
            "styleId": "75343",
            "creatorId": "3211"
      }]
    }
    
    {
        "_id": "*",
        "_rev": "*",
        "widgetTypeId": "1831",
        "creationId" "da17faef-3591-4579-b5f6-ff0a719a6da7",
        "creationStartTime": 1556471139,
        "creationEndTime": 1556471173,
        "color": "#ffffff",
        "styleId": "92811",
        "creatorId": "82812"
    },{
        "_id": "*",
        "_rev": "*",
        "widgetTypeId": "1831",
        "creationId" "893fede7-3874-44ed-b290-7001b4901bc9",
        "creationStartTime": 1556471481,
        "creationEndTime": 1556471497,
        "color": "#cccccc",
        "styleId": "75343",
        "creatorId": "3211"   
    }
    

    方法2创建一个高数据库

    这是一个常见的问题。一般来说,小的、不变的文档可能比少的、大的、可变的文档性能更好。原因包括:

  • CouchDB中不支持部分更新(补丁)。因此,如果需要将数据插入一个大文档中的数组,则需要获取所有数据,解包json,插入数据,重新打包json,然后通过线路将整个内容发送回CouchDB

  • 更大的文档也会带来更多的内部开销,尤其是在索引方面

  • 最好让作为一个单元更改的数据组成一个文档。文档中不断增加的列表是个坏主意

    在我看来,您的第二个备选方案非常适合您想要实现的目标:一组可以保持不变的小文档。然后创建一组视图,以便查询时间范围和小部件类型