PouchDB的顺序唯一ID

10

PouchDB 的最佳实践建议是使用 PUT 而不是 POST 来创建新文档(类似于关系型数据库中的行),主要原因是后者生成一个随机 ID,这使得以后对数据进行排序变得低效。另一方面,PUT 要求提供用户生成的唯一 ID。

我有点困惑,PouchDB 似乎没有提供这个功能,那么生成唯一的连续 ID 的最佳方法是什么(类似于 PostgreSQL 的序列)?我可以使用类似于 maxID 的东西,但我认为主要问题在于确保当我确定 maxID 时,没有其他人在我实际成功插入记录之间插入记录。

有什么建议吗?


好问题!现在我正在使用像这里描述的GUID生成器。根据随机数生成器的实现,这可能是一个好的做法... - Phonolog
我不确定使用GUID的意义何在,因为你可以通过上面提到的“POST”来获取它们。关键是要有一个独特但可预测和可排序的东西来适应PouchDB。最好的方法是模仿Postgres的序列。 - punkish
1个回答

2
虽然我没有完整的答案,但建议尝试类似 Twitter 的 Snowflake ID。如果有 JavaScript 实现,这可能是一个选择。
一个更简单的版本是简单地使用 var id = (new Date()).getTime(); 它返回自1970年1月1日00:00:00 UTC以来的毫秒数。
编辑:下面的文章提供了几个Node包的建议:

文档中提到的所有示例都提到使用时间,但显然在某个时刻两个客户端可能会生成相同毫秒级别的时间戳。当您将其用于为文档中的每个元素生成ID时,UUID似乎会带来很多开销,而雪花算法ID似乎受到任意分区边界的限制:例如,如果您有超过32个客户端或32个进程在一个客户端上怎么办?总体而言,在分布式环境中,这似乎不仅是一个难题,而且是一个不可能高效解决的问题。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接