2012-03-29 44 views
0

我正在为每个事务添加一系列记录(例如100)。我希望每条记录都有一个“交易ID”字段,该字段对于每个新交易都是递增的,并且对于在特定交易中插入的每条记录都是相同的值。我希望这样做,以便客户端可以执行查询,然后在将来的某个时刻执行相同的查询,但只检索具有较新事务ID的记录。做这件事的最好方法是什么?我真的不想在应用程序级别生成ID,因为数据库被多个进程访问,所以我必须协调ID分配跨进程。或者我可以有一个专用的TXID表和一个autoincrememt列,在开始事务之前插入,并使用last_insert_rowid()作为TXID,但是为了生成ID,存储递增数字表似乎有点低效。有什么想法吗?谢谢。sqlite:为多插入事务创建事务ID

回答

1

如果你想要一个递增的整数,你应该确实做你所建议的 - 有另一个表维护事务ID。您可以定期扫描这张表以删除行,尽管它们会非常小巧高效,所以这不应该成为一个大问题。

还有其他各种可能的解决方案,但正如您已经想到的那样,其中大多数解决方案在您的情况下不起作用(根据您所需的保真度,碰撞的可能性)。如果你需要利用数据库来保证唯一性,这是在SQLite中唯一的方法。或者,您可以尝试类似randomrandomblobfunctions,但显然没有针对PRG的唯一性保证。

如果需要一个单调递增的整数,你也可以生成一个RFC 4122 UUID在应用层面(这些仍然冲突,但是很少,如果你是从许多过程编写 - 你可能还需要标记它与一个特定于流程的字符串并使其成为URN,类似于urn:uuid:<tag>+<uuid>)。如果所有作者都在同一台机器上,使用类似pid这样的标签就足以保证唯一性。

+0

感谢您的回答。我想过UUID,但我需要确保每个新ID都大于最后一个。将做TXID表解决方案。 – gimmeamilk 2012-03-29 20:45:51