2011-04-11 26 views
4

我想存储由(String,String,DateTime)三元组索引的对象。让我们称这些标识符,类别,日最佳数据结构存储由3元组索引的对象,以便沿每个维度和低内存配置文件快速检索?

在数据结构中的任何对象被保证是由3元组唯一的(无重复)

的数据结构应支持快速回答以下问题,例如:
- 什么是所有唯一标识符?
- identiifer“xyz”有哪些类别?
- identifier =“xyz”和category是“mycategory”的日子是什么?

去除也是可能的。保持低内存配置文件会很棒。

为基准,我使用的字典<字符串,字典<字符串,字典<日期时间,对象> > >

理论上,这应该给我O(1)检索,但我不熟悉字典的内部,通常我觉得我的解决方案是次优的。

我知道这里可能没有一个正确的答案,我可以提供大量的使用细节,但也许有人可以给我几个想法来玩?

编辑
执行的唯一的检索与平等(即identiifer = “XYZ”)。我不使用不等式(大于,小于,等)

+0

可以标识符是任意字符串还是对它们有约束(总是给定长度或更少等)? – R0MANARMY 2011-04-11 22:08:52

+0

由于没有约束,所以在实际中标识符永远不会超过10个字符(如果需要,我可以限制为这个) – SFun28 2011-04-11 22:13:43

回答

1

这取决于每列中相对数值的数量,它们的分布以及查询的分布,所以没有最好的答案。

你的字典对于一维检索很好,但是你必须线性搜索你想要的功能组合。

如果空间不是问题,您可以有3级索引(树或散列表),以便您首先检索沿1维的项目,然后使用该节点上的字典查找沿着第二个项目的所有项目维度为维度1的值,然后使用该节点上的字典查找包含所有3个值的所有项目。

如果您想用不等式回答查询,这也很重要。在这种情况下,树比字典更好,因为它是有序的。

+0

嗨拉里 - 我添加了一个编辑到我的文章。没有不平等。 – SFun28 2011-04-11 22:19:54

+1

谢谢!我决定坚持用字典<...> – SFun28 2011-04-12 15:30:19

+0

可能是一个不错的选择,这就是我会做的(在没有进一步的信息)。你可能希望有3个嵌套索引的例子是,如果这些字段本身具有嵌套或层级结构,如“国家”,“城市”,“街道”。 – 2011-04-12 21:42:38

0

,因为在您添加标记.NET 4.0我认为你是在.NET 4.0中,为什么不是一个Dictionary<Tuple<T1,T2,T3>,object>

+0

这会使他对当前的嵌套字典结构产生什么影响? – R0MANARMY 2011-04-11 22:09:49

+1

沿着每个维度查询会很慢。 – SFun28 2011-04-11 22:15:24

+0

速度明智可能没有什么,但可用性明智我会认为索引代码会更清洁。你可以编写一个扩展方法来排序和比较项目,而不必“点下”嵌套对象图。 – 2011-04-11 22:15:25

相关问题