withinboredom / distributed-hashmap
Dapr 状态存储的分布式哈希表。
v0.0.1
2021-05-24 20:07 UTC
Requires
- php: >=8.0
- dapr/php-sdk: dev-main
- lastguest/murmurhash: ^2.1
Requires (Dev)
- ext-pcntl: *
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-25 21:48:04 UTC
README
Dapr 的分布式哈希表。
这是一个简单的无锁哈希表实现,允许快速并发写入。它几乎像常规哈希表一样工作,只是它不是使用内存,而是使用 Dapr 状态。
特性
- 订阅/取消订阅键更改/删除/插入。
- 支持多种语言。
- 拥有大量项目而不用担心竞态条件。
实现
限制
当前版本存在一些限制
大小
无法获取哈希表中键的数量而不引起竞争或必须遍历每个桶。因此,该函数并未提供。如果您仍然需要这个功能,请提交一个问题。
重建
在创建哈希表时,请尝试猜测您可能存储的键的数量以及每个桶的最大负载。如果最大键设置得太小或最大负载太大,您可能会遇到过多的竞争或意外的哈希表重建。
当哈希表桶中有 maxLoad
个项目时,将触发重建。这意味着哈希表的所有读取器/写入器将立即开始将所有键从哈希表复制到哈希表的新一代。每个读取器/写入器都需要参与以确保冗余,因为它们没有进行协调。旧键不会从上一代删除。虽然这相当快,但当哈希表的大小超过 ~100,000 项时,仍然需要几分钟。
并发
在我的实验中,除了不同语言如何处理并行任务之外,并发性没有太多问题。例如,在 PHP 中进行分支会导致非常小的开销,允许超过 2000 个线程同时向哈希表写入,而 C# 似乎在活跃写入线程数量超过机器上的物理核心数量后就会变得缓慢。