2013-02-28 80 views
4

我即将目录10种万种图书与他们的ID(目前它们的行号),冠军将被存储tokenising他们之后。数据的结构必须类似<String, Arraylist<Integer>>.字符串将表示令牌,整数将表示行号。索引<字符串,ArrayList的<Integer>>使用B树

我要建立使用此工具:Java的,持久的记忆,不使用RDBMS越好。由于这个数据结构是可变的,我找不到任何支持MultiMaps的工具,并且结构>要使用BTree或任何其他持久数据结构进行索引。

我试过MapDB,而是转向只接受不可改变的,这在我的情况不适用(ArrayList的)

任何想法表示赞赏。

+0

什么[番石榴Multimap之](http://guava-libraries.googlecode.com/svn/tags/release03/javadoc/com/google/common/collect/Multimap。 HTML)? – 2013-02-28 14:23:38

+0

Guava Multimap似乎是内存中的存储空间。 – EurikaIam 2013-02-28 14:25:57

+0

“持久性内存” - 等待,所以你想要数据在内存中,还是你希望它持久? (即存储在磁盘上)。如果内存中,只需使用'HashMap'。如果在磁盘上,那么BTree是正确的选择,但我怀疑你会得到一个好的库,因为这不是一个RDBMS。 (看作是“将BTrees写入磁盘的东西”是关于RDBMS的内容的一个很好的描述。) – millimoose 2013-02-28 14:26:40

回答

1

你需要什么叫做MultiMap。 MapDB不直接支持那些,但是复合集几乎一样好。

实施例是在这里: https://github.com/jankotek/MapDB/blob/release-1.0/src/test/java/examples/MultiMap.java

+0

嗨,1月,我尝试了你的建议。唯一的问题是结果指数的大小。对于19,177,268令牌,其ID为591.1 MB。这只是尚未添加到索引中的整个令牌的10%。我使用了NavigableSet > map1 = db.getTreeSet(“test”);你认为指数的大小可以通过任何方式减少吗?或者是Java中序列化的本质? – EurikaIam 2013-03-06 12:20:16

+0

确保您调用db.compact()对存储进行碎片整理。此外,我们正计划实施元组增量包装,这将显着减少索引大小(将很快实施) – 2013-03-08 23:43:33

相关问题