通过多个键组合的海量数据进行搜索C#
我想以最快的方式通过大量数据进行搜索,这些数据由多个键组成。 我有一个包含此信息的文件,但我想将其加载到内存中。内存电容不是问题通过多个键组合的海量数据进行搜索C#,c#,arrays,performance,list,dictionary,C#,Arrays,Performance,List,Dictionary,我想以最快的方式通过大量数据进行搜索,这些数据由多个键组成。 我有一个包含此信息的文件,但我想将其加载到内存中。内存电容不是问题 key1 | key2 | key3 | key4 | value1 | value2 -----|------|------|------|--------|-------- 1 | 1 | 1 | 1 | str | 20 1 | 1 | 1 | 2 | str | 20 1 | 1 | 1
key1 | key2 | key3 | key4 | value1 | value2
-----|------|------|------|--------|--------
1 | 1 | 1 | 1 | str | 20
1 | 1 | 1 | 2 | str | 20
1 | 1 | 1 | 3 | str | 20
1 | 1 | 2 | 1 | str | 20
2 | 1 | 1 | 1 | str | 20
我看过一些收藏品,但仍不确定:
也许多键词典会更好,因为它避免了键中的大量冗余
public class MultiKeyDictionary<T1, T2, T3> : Dictionary<T1, Dictionary<T2, T3>>
key1 | key2 | key3 | key4 | value1 | value2
-----|------|------|------|--------|--------
1 | 1 | 1 | 1 | str | 20
| | | 2 | str | 20
| | | 3 | str | 20
| | 2 | 1 | str | 20
2 | 1 | 1 | 1 | str | 20
公共类多键字典:字典
键1 |键2 |键3 |键4 |值1 |值2
-----|------|------|------|--------|--------
1 | 1 | 1 | 1 | str | 20
|| | 2 | str | 20
|| | 3 | str | 20
|| 2 | 1 | str | 20
2 | 1 | 1 | 1 | str | 20
我不会寻找每一把钥匙,但可能是其中的50%。
我甚至愿意接受疯狂的建议。你可以简单地使用你的键的
元组作为字典键和值
var bank = new Dictionary<Tuple<int, int, int, int, int>, Tuple<string, int>>();
bank.Add(Tuple.Create(k1, k2, k3, k4), Tuple.Create("str", 20));
var bank=newdictionary();
添加(Tuple.Create(k1,k2,k3,k4),Tuple.Create(“str”,20));
您能否具体化为每次搜索单独优化的数据的多个副本?为Key1编制索引,为key2编制索引,等等。您能否更具体地说明需要对该数据执行的具体查询?我可以按键从左到右拆分数据,但要访问键2,我需要先访问键1。所以每个右键都在左键的集合中。键4在键3中,键3在键2中…假设我的键是国家->州->城市->房子。它们都来自一个键。有一个相关的帖子有很多提示:2GB的大小限制是多少?您需要并发访问吗?你的钥匙是独一无二的吗?对查询进行并行化、对数据进行分区等可能值得深入研究的事情很多。不,因为如果他只想找到一个键的匹配项,他无法找到,那么你只需将所有键组合成一个键,将每个记录限制为一个键,这不是问题所在。@Eluvatar在这种情况下,他可以使用字典库,让每个键指向同一元组值key1-4,生成一个键。我想用字典之类的东西来避免键中的冗余。。。但性能至关重要,所以。。。