sqlite:为多插入事务创建事务ID

时间:2012-03-29 19:55:27

标签: sqlite transactions

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

1 个答案:

答案 0 :(得分:1)

如果你想要一个递增的整数,你应该确实做你建议的 - 让另一个表维护交易ID。您可以相当频繁地扫描此表以删除行,尽管它们将非常小且高效,因此这不应该是一个大问题。

还有其他各种可能的解决方案,但正如您已经想到的那样,大多数解决方案都不适合您的情况(碰撞的可能性,取决于您所要求的保真度)。如果您需要利用数据库来保证唯一性,那么这是在SQLite中实现它的唯一方法。或者,您可以尝试类似randomrandomblob functions的内容,但显然没有为PRG做出唯一性保证。

如果你需要一个单调递增的整数,你也可以在应用程序级别生成一个RFC 4122 UUID(如果你是从许多人那里写的,这些仍然可能会发生冲突进程 - 您可能还希望使用特定于进程的字符串对其进行标记,并使其成为URN,如urn:uuid:<tag>+<uuid>)。如果所有作者都在同一台机器上,那么使用pid这样的标签就足以保证唯一性。