【问题标题】:Sequential unique IDs for PouchDBPouchDB 的顺序唯一 ID
【发布时间】:2017-04-20 20:17:47
【问题描述】:

PouchDB 最佳实践建议是使用PUT 而不是POST 来创建新文档(类似于rdbms 中的一行),主要是因为后者会生成一个随机ID,这使得后续排序效率低下的数据。另一方面,PUT 需要提供用户生成的唯一 ID。

我有点困惑 PouchDB 似乎没有提供开箱即用的功能。那么,生成唯一的顺序 ID(类似于 PostgreSQL 的顺序)的最佳方法是什么?我可以使用类似于maxID 的东西,但在我看来,主要问题是确保在我确定 maxID 和我实际成功插入记录之间没有其他人插入记录。

建议?

【问题讨论】:

  • 好问题!现在我正在使用here 中描述的生成的 GUID。根据随机数生成器的实现,这可能是一个好习惯......
  • 好吧,我不确定使用 GUID 的意义何在,因为正如我上面提到的,您总是可以通过使用 POST 来获得这些。关键是要有一些独特但可预测和可排序的东西来适应 PouchDB。最好的是模仿 Postgres 的序列

标签: pouchdb


【解决方案1】:

虽然我没有完整的答案,但建议尝试类似 Twitter 的 Snowflake ID。 如果有 JavaScript 实现,这可能是一个选项。

一个更简单的版本是简单地使用

var id = (new Date()).getTime();

返回自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数。

编辑:following article 建议了几个 Node 包:

【讨论】:

  • 我在文档中看到的所有示例都提到了使用时间,但显然在某些时候两个客户端可能会在同一毫秒内生成时间戳。例如,UUID 似乎是很多开销。您正在使用它为文档中的 eacj 元素生成 id,而雪花 id 似乎在任意分区边界处受到限制:例如如果您有超过 32 个客户端,或者一个客户端上有 32 个进程怎么办?总体而言,这似乎不仅是一个难题,而且是一个不可能在分布式环境中有效解决的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 2020-06-04
  • 2019-01-31
相关资源
最近更新 更多