2013-02-28 5 views
4

Я собираюсь индексировать 10 миллионов названий с их идентификаторами (теперь их номера строк), титры будут сохранены после их токенизации. Структура данных должна быть чем-то вроде <String, Arraylist<Integer>>. Строки будут представлять токены, целые числа будут представлять номера строк.Индексирование <String, Arraylist <Integer>> с использованием B-Tree

Мне нужно создать этот инструмент, используя: Java, постоянную память, не используя СУРБД, насколько это возможно. Поскольку эта структура данных изменчива, я не смог найти какие-либо инструменты, поддерживающие MultiMaps, со структурой>, которая будет проиндексирована с использованием BTree или любых других постоянных структур данных.

Я попытался MapDB, но оказалось только принять неизменное, что в моем случае не применяется (Список_массивов)

Любые мысли приветствуются.

+0

насчет [Гуава Multimap] (http://guava-libraries.googlecode.com/svn/tags/release03/javadoc/com/google/common/collect/Multimap. HTML)? –

+0

Guava Multimap, похоже, находится в памяти. – EurikaIam

+0

«Постоянная память» - подождите, так что вы хотите, чтобы данные были в памяти, или вы хотите, чтобы она была постоянной? (I.e. хранится на диске.) Если в памяти, просто используйте 'HashMap'. Если на диске, то BTree - правильный выбор, но я сомневаюсь, что вы получите хорошую библиотеку для этого, а не для РСУБД. (Увидев, что «что-то, что пишет BTrees на диск», является хорошим описанием кишок RDBMS.) – millimoose

ответ

1

Что вам нужно, это называется MultiMap. MapDB не поддерживает эти функции напрямую, но имеет составные множества, которые почти одинаковы.

Пример здесь: https://github.com/jankotek/MapDB/blob/release-1.0/src/test/java/examples/MultiMap.java

+0

Привет, Ян. Я попробовал то, что вы предложили. Единственная проблема - размер приведенного индекса. 591,1 МБ для 19,177,268 токенов с их идентификаторами. Это всего лишь 10% всех токенов, которые еще не добавлены в индекс. Я использовал NavigableSet > map1 = db.getTreeSet ("test"); Считаете ли вы, что размер индекса может быть уменьшен любыми способами? или Является ли это характер сериализации в Java? – EurikaIam

+0

Убедитесь, что вы вызываете db.compact() для дефрагментации хранилища. Также мы планируем внедрить дельта-упаковку для кортежей, что резко снизит размер индекса (скоро будет имплотен) –

 Смежные вопросы

  • Нет связанных вопросов^_^