我有一个 64 位整数时间戳和一个 Sting 用户名,它们组合成一个字符串并最终存储到一个数据库列中。撇开为什么我不能将它们存储在具有适当类型的单独列中,我的问题是如何组合它们以从底层数据库中获得更好的性能。那将是 sqlite、PostgreSQL 或 MySQL,还不确定。
我想象他们将使用 b-trees 作为索引,并且像 (timestamp-username) 这样连接会很糟糕,因为时间戳通常总是会进行,而树需要经常平衡。username-timestamp 应该要好得多,但每个用户记录仍然会随着每个新条目而增加。我正在考虑也将时间戳与位的相反顺序。
还有什么我可以做的吗?一些聪明的异或什么的?什么是合理的最佳模式?数据将永远通过请求生成的确切字符串来访问,没有范围等。
唯一的要求是在生成的字符串和源数据之间以两种方式进行相对快速的转换。
更新:伙计们,我正在获取信息,哪种字符串更适合作为数据库的主键存储(sqlite、mysql和postgresql之一)。也许答案是没关系,或者取决于数据库引擎。我正在使用的架构或缓存解决方案没有特别的问题。我只是问是否有任何改进的空间以及如何改进。我会很感激一些关于主题的答案。
UPDATE2:对我来说,很好的答案仍然不确定: 增量列是否会使列上的 b-tree 索引不平衡? https://stackoverflow.com/a/2362693/520567