数据结构求助

2022-10-08 14:45:53 +08:00
 wdc63

当前项目有实现以下数据结构的需求: 1 大量的并行读取与修改; 2 支持在多线程情况下以 O1 或者极小的开销随机获取一个数据并删除(数据集为空时返回 null ,不报错。),插入一个数据。 3 基本上只有 2 一个需求,不需要顺序列表,不需要下标获取数据,不需要队列,不需要迭代器,无重复数据;

使用语言为 C#,目前测试使用 lock(List<T>)或者 Hashset 的开销都太大,使用 ConcurrentBag 、ConcurrentDictionary 都无法满足要求,请问各位大佬实现上述需求最佳的数据结构是什么。

2328 次点击
所在节点    程序员
26 条回复
helloworld000
2022-10-09 06:43:57 +08:00
你有多大的 qps ? peak 的 read and write 分别是多少?脱离实际的需求都是瞎扯淡,你说的这些跟数据结构没半毛钱关系,完全是没想清楚问题在 yy

tldr 直接上个 redis 一把梭就行了
netnr
2022-10-09 08:36:44 +08:00
ConcurrentDictionary 获取所有 key 为数组再随机取一个,或者其它方式单独存储一份 key
wdc63
2022-10-09 09:17:55 +08:00
@helloworld000 高峰时,每个主 loop 有上千这样的查询、删除和写入等,每秒 60-100fps 。
wdc63
2022-10-09 09:18:19 +08:00
@netnr 那每次查询都是 On ,太慢了。
masterjoess
2022-10-09 10:29:34 +08:00
一个 fixed size array 存放所有对象
一个 atomic random queue 存放所有可用 index

标记软删除或者另外线程回收
这样可以吗?
helloworld000
2022-10-09 18:43:47 +08:00
@wdc63 就这点需求,redis 的 hash 就足够了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/885261

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX