我有一个trie(用元组和列表实现)有几千个条目,我想支持并发读取.数据的内存占用量在10-20 MB范围内.trie构建一次,之后只读.
维护状态并为客户端提供并发访问的推荐方法是什么?
这是我尝试过的:
1)使用trie作为状态创建gen_server.这很好,但很明显,所有的电话都是序列化的.
2)修改(1)为每个调用生成一个新进程,它接受状态,请求和From
.每个新进程遍历trie并调用gen_server:reply/2
结果.此解决方案似乎不起作用,因为内存和CPU使用率爆炸.我认为这是因为状态被复制到每个调用的生成进程.
来自mochiweb的mochiglobal就是为这种用例而设计的.基本上它将采用您的数据结构并将其编译为模块,因此数据是共享的(模块常量为零拷贝).只适用于不经常更改的数据结构,但听起来就像你拥有的那样.