我是来自SQL背景的菜鸟。请提前原谅我的SQL。
目前正在开发一个新的客户端项目,我需要在其中存储大量数据,这非常简单,但我不确定在Couchdb中执行此操作的最佳方法是什么。
这适用于员工车辆追踪。我需要存储VIN(车辆识别码),GPSLat,GPSLong,DateTimeStamp。
VIN永远不会改变,但会有大量与之相关的GPS数据。
在SQL结构中,它非常简单 - VIN表,然后是数据的另一个关系表。
在Couchdb密钥对中,您是建议反复存储VIN,还是创建1个VIN作为密钥对并以某种方式存储GPS数据?如果是这样,我应该如何将GPS数据存储为密钥对?
请事先向您介绍密钥对存储的专家。
答案 0 :(得分:1)
你可以两种方式做到这一点。 Couchdb支持linked documents,您可以在其中创建一次文档并在其他文档中引用它,然后使用emit
编写一个可以include_docs=true
原始文档和链接文档内容的视图。
但是由于你有一个非常小的数据,只有一个json字段,我建议你将字段存储在文档中,因为你必须将vin
id与包含其余车辆细节的文档相关联无论如何。
当您要使用子文档检索父文档中的大量字段时,链接文档策略非常有用。
答案 1 :(得分:1)
我认为这取决于您希望如何访问数据。
如果您经常访问所有链接数据,但更新很少,那么您可以修改该文档。请记住,虽然随着您不断更新同一个文档,您每次都必须检索它,因为文档可能变得非常大,这可能会变慢。
我可能会为每个时间戳存储一个文档。您可以使用它来快速访问。您的观点可以支持列表,如果您有:
[ {vin as key}, {datestamp}]
您可以使用视图的startkey / endkey参数快速访问给定vin / date的所有条目。 同样,您可以通过vin查看最大日期戳。
答案 2 :(得分:1)
谢谢大家,所以听起来最好的存储方式与我想要检索数据的方式有关。
根据上面的答案,听起来最好每次都存储VIN。
插入数据后,它不会再次更新。
从SQL的角度来看,我最常见的查询是: SELECT * FROM emp_vehicledata ORDER BY datetimestamp DESC(有时我可以在日期之间)
因此,我不需要在整个文档修订版本历史记录中获取特定的日期集,看起来像VIN的新密钥对最适合每个条目。
我是否正确理解Couchdb存储?再次感谢