我想知道存储大量字符串和检查重复的最佳方法是什么。
我们必须考虑我们的优先事项:
什么是最佳解决方案,当我们的目标是快速重复检查并插入新字符串时间(没有随机访问或存储空间问题)? 我考虑过SQL数据库,但哪个DB最适合这个解决方案? 如果我们使用SQL DB,比如MySQL,哪个存储引擎最好? (当然,由于数据量的原因,我们必须排除内存)
答案 0 :(得分:4)
在输入字符串上使用哈希函数。输出散列将是记录的主键/ id。
然后你可以检查数据库是否有这个hash / id / primary key:
您必须根据速度和预期的字符串数量以及哈希冲突要求/保证来考虑使用哪个哈希函数/方案/强度。
解决冲突的几种方法:
当然,取决于这需要多长时间以及你期望占用多少内存/字符串数量,你实际上可以在没有数据库的情况下直接在内存中执行此操作,这会更快。
答案 1 :(得分:3)
您可能需要考虑NoSQL解决方案:
<强> Redis 即可。使用Redis解决了一些用例:
<强> memcached 即可。 memcached和Redis之间的一些比较:
Membase/Couchbase 将OMGPOP的Draw Something视为one of their success stories。 Redis和Membase的比较:
有些问题:
希望这有帮助。
答案 2 :(得分:1)
生成后缀树以存储字符串。 Ukkonen在http://www.daimi.au.dk/~mailund/slides/Ukkonen-2005.pdf中的算法将为如何创建后缀树提供一些见解。有多种方法可以存储此后缀树。但是一旦生成,查找时间就非常短。