背景资料
这是我使用 couchbase 的第一天。我一直在使用 couchbase 附带的数据库控制台查看示例数据库。具体来说,我一直在使用“beer-sample”应用程序来尝试了解如何组织我的数据库。似乎他们有两种不同类型的文件——啤酒厂或啤酒——所有的东西都在一个桶里。
对于我的个人申请,我有以下数据:
{
"server_details": {
"name": "testserver",
"dns_name": "testserver.mydomain.net",
"ipv4": "10.xx.xx.xx",
"ipv6": "",
"type": "webserver"
},
"server_status": {
"up_to_date": true
},
"packages": {
"package1": {
"current_version": "x.x",
"previous_version": "x.x",
"last_updated_on": "2016-03-16",
"play_id": "link to audit table"
},
"package2": {
"current_version": "x.x",
"previous_version": "x.x",
"last_updated_on": "2016-03-16",
"play_id": "link to audit table"
}
}
}
我有不同的服务器类型,例如网络服务器、应用程序服务器、dns 服务器等。所以我打算只使用相同的 json 对象,但更改“类型”字段。
问题
我还需要创建某种审核表,以显示服务器上的包何时更新的历史记录。我需要跟踪以下内容:
- 执行日期
- 脚本名称
- package1_version_b4_update
- package1_version_after_update
- 服务器_dns_名称
这是我为此类文档提出的 json 对象:
{
"audit_details": {
"script_name": "upgrade_all_mrts",
"rt_ticket_number": "16123",
"execution_date": "2016-03-16",
"status": "success"
},
"affected_servers": {
"server1": {
"package1":{
"version_after_update": "x.x",
"version_before_update": "x.x",
"last_updated_on": "2016-03-16"
},
"package2": {
"version_after_update": "x.x",
"version_before_update": "x.x",
"last_updated_on": "2016-03-16"
}
},
"server2": {
"package1":{
"version_after_update": "x.x",
"version_before_update": "x.x",
"last_updated_on": "2016-03-16"
},
"package2": {
"version_after_update": "x.x",
"version_before_update": "x.x",
"last_updated_on": "2016-03-16"
}
}
}
}
这只是另一个结构完全不同的文件吗?或者我应该把它放在另一个桶里?如果它应该都在同一个桶中,我提议的 json 对象的结构是否合适?从根本上说,我想我的问题是,您是否将所有内容作为各种文档的集合转储到一个桶中……并确保相关文档具有相同的结构,以便您可以一次查询所有文档?
很抱歉提出补救性问题,但我正在尝试快速构建原型......同时阅读文档。任何提示将不胜感激。
我也是 Couchbase 的新手,但从我到目前为止所学到的情况来看:通常,您想要使用不同存储桶的原因不一定与您想要放入其中的文档类型有关。也就是说,您可以将存储桶配置为以不同方式进行复制、使用 XDCR、以不同方式分配内存等。但是,在同一个存储桶中拥有各种不同的文档“类型”是完全可以接受的。
为不同的文档赋予“类型”属性可能是个好主意,这样您就可以更轻松地查询它们。
因此,例如,在您的示例中,也许第一个将具有
"type":"server"
,第二个将具有"type":"audit"
,依此类推。