【发布时间】:2011-12-25 08:12:28
【问题描述】:
我需要存储短字符串(50 多个字符),然后快速查找它们。起初我想为此使用 SQLite。我创建了一个带有单个索引 TEXT 列的表。使用各种低级技巧,我可以在 10 秒内用 100 万个字符串填充数据库。
问题在于,如果重新启动 PC,添加额外的 10.000 行需要 30 秒,这与 10 秒内 1M 行不一致。这样做的原因是 SQLite 在添加新行之前必须从磁盘读取现有索引的很大一部分。另一个问题是数据库的大小翻了一番,因为由于 b-tree 机制,所有字符串都存储了两次(一次在常规表中,一次在索引表中)。
有没有简单的替代方案?例如,哪个使用基于哈希的查找?我知道各种 NoSQL 解决方案,但它们专注于去中心化和分布式存储,而我只需要一个简单的嵌入式“平面文件”数据库?
【问题讨论】:
-
关于索引我不明白?您是否使用与 key 和 value 相同的值?
-
如果你想要一个嵌入式数据库,你需要指定女巫语言/平台。
-
如果你使用相同的值作为索引和值,一个索引是完全没用的。
-
如果索引包含与实际表完全相同的内容,全表扫描会变慢吗?您还需要考虑到表和索引中的所有内容都是重复的。
-
@jgauffin 因为索引中的数据是经过排序的,所以它可以进行快速的二分查找,并跳过大部分行。使用全表搜索,必须检查每一行。
标签: .net database hash hashtable key-value