Couchdb密钥对结构

时间:2014-04-09 13:13:38

标签: couchdb nosql

我是来自SQL背景的菜鸟。请提前原谅我的SQL。

目前正在开发一个新的客户端项目,我需要在其中存储大量数据,这非常简单,但我不确定在Couchdb中执行此操作的最佳方法是什么。

这适用于员工车辆追踪。我需要存储VIN(车辆识别码),GPSLat,GPSLong,DateTimeStamp。

VIN永远不会改变,但会有大量与之相关的GPS数据。

在SQL结构中,它非常简单 - VIN表,然后是数据的另一个关系表。

在Couchdb密钥对中,您是建议反复存储VIN,还是创建1个VIN作为密钥对并以某种方式存储GPS数据?如果是这样,我应该如何将GPS数据存储为密钥对?

请事先向您介绍密钥对存储的专家。

3 个答案:

答案 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存储?再次感谢