【发布时间】:2015-02-03 00:44:33
【问题描述】:
我们在服务器端服务中进行了大量尝试,其中包含数千万个节点。整个 trie 大约需要 4 GB 的 RAM。到目前为止,我们仅使用基本的二进制 .NET 序列化将 trie 存储在文件中并将其重新构建回内存中。但这太慢了......在我们的例子中,有什么更好的序列化算法,某种直接的mmap 类似的技巧会很棒,但.NET 不允许自定义内存分配器。目的是尽量减少保存,尤其是从文件中加载 trie(文件大小不是我们关心的问题)。
注意:由于延迟,我们绝对不能使用关系数据库。
更新:嗯,我们发现了这个类似的问题Persisting a trie to a file - C。 C 社区似乎更适合这类问题;) => 接受 protobuf.net 解决方案。
【问题讨论】:
-
数据库太慢了。抱歉,伙计们,试试吧:en.wikipedia.org/wiki/Trie
-
@DJKRAZE 请在进行错误编辑之前学习算法。
-
@john:某些数据结构,例如高程图,在数据库结构中是不合适的。
-
@eeq 我认为我们需要更多地了解您存储的内容,尤其是在附加节点中。即使一个磁盘驱动器寻道也不可接受,这是新信息,但仍不能告诉我们您要达到什么目的或数据是什么。
-
我只想把它扔在那里:也许内存管理/垃圾收集环境也不适合您的需求。即使使用并发 GC,您也可能会遇到这种情况您似乎过早优化的瓶颈......
标签: c# .net serialization trie