我正在为每个事务添加一系列记录(例如100)。我希望每个记录都有一个“事务ID”字段,该字段为每个新事务递增,并且对于插入到特定事务中的每个记录都是相同的值。我希望这样客户端可以执行查询,然后在将来的某个时候执行相同的查询,但只检索具有较新事务ID的记录。我真的不想在应用程序级别生成ID,因为DB由多个进程访问,因此我必须协调跨进程的ID分配。或者,我可以有一个带有单个自动增量列的专用TXID表,在开始事务之前插入到该表中,并使用last_insert_rowid()作为TXID,但是仅仅为了生成ID而存储一个递增数字的表似乎有点低效。有什么想法吗?谢谢。
发布于 2012-03-30 04:00:35
如果你想要一个递增的整数,你确实应该按照你的建议去做--用另一个表来维护事务ID。您可以相当有规律地清理该表以删除行,尽管它们将非常小且高效,因此这不应该是一个大问题。
还有许多其他可能的解决方案,但正如你已经知道的那样,它们中的大多数在你的情况下都不起作用(冲突的可能性,取决于你所要求的保真度)。如果您需要利用数据库来保证唯一性,这是在SQLite中实现这一点的唯一方法。或者,您可以尝试random或randomblob functions之类的方法,但显然不能保证PRG的唯一性。
如果您不需要单调递增的整数,也可以在应用程序级别生成RFC 4122 UUID (如果您从多个进程编写代码,这些仍然可能会发生冲突,但是很少发生--您可能还想用特定于进程的字符串对其进行标记,并使其成为URN,例如urn:uuid:<tag>+<uuid>)。如果所有的写入器都在同一台机器上,那么使用像pid这样的标记就足以保证唯一性。
https://stackoverflow.com/questions/9932522
复制相似问题