2010-10-28 50 views
0

早上好,冗余字典,模拟数据库或物理数据库?

目前,我需要一些更有经验的数据库问题比我更有经验的人的帮助。我需要使用两组(String,Int32)对。第一个约有160,000对,第二个约有1,620,000对。问题是这个最后一个集合的字符串的每个部分都包含在第一个集合中......我想通过实现三个字典来模拟RAM内存中的数据库:

Dictionary<String, Int32>要存储一个字符串和类似的东西它是“主键”, Dictionary<Int32, Int32>将每个主键连接到所需的值 Dictionary<Tuple<Int32, Int32>, Int32>以存储一对主键和另一个值。

使用两个字典并存储冗余信息,该程序分配大约200Mb的RAM。虽然这不是关键问题,但我想减少它。所以我尝试使用上面的三个字典,并且,正如我所料,分配的内存减少了很多,大约90Mb。但是,按字符串搜索时的查找性能降低了,大约是第一个简单但冗余方法花费的时间的两倍。

所以现在我正在考虑实现这个作为SQLite数据库。问题是查找时间:它应该尽可能快。使用这种类型的数据库有可能获得与RAM访问时间相似的查找时间吗?

非常感谢。

回答

0

可能。你的RAM数据库并没有处理任何事情,只是纯粹的比较,因为它没有索引结构。到目前为止您还没有给出任何搜索时间......可能是,通过正确使用一两个索引,您可以很好地打败您的字典时间。 LOT依赖于RAM中特定的查询行为和查询执行时间。没有这些信息,我们可以说并不多。

一般来说,特定的数据结构也可能比通用数据库快得多。尽管如此,它们不那么灵活。真的取决于你在这里如何检索数据。