Соответствующая структура данных - PullRequest
2 голосов
/ 17 ноября 2011

У меня 5 миллионов пар ключ-значение.Просьба предложить соответствующую структуру данных для хранения таких огромных данных.Что если мои данные в будущем могут расшириться до 1 миллиарда пар ключ-значение?Пожалуйста, предложите структуру данных в Java, которая будет вмещать эти данные.

Ответы [ 4 ]

4 голосов
/ 17 ноября 2011

Хеш-таблицы поддерживают один из самых эффективных типов поиска.

1 голос
/ 17 ноября 2011

Любая структура данных может хранить большое количество информации, но чтобы узнать, какой из них вам нужно использовать, вы должны подумать о том, как информация будет добавлена, удалена и доступна.Возможно, вам также придется подумать о том, должна ли информация оставаться в памяти или допустимо, чтобы в памяти были только самые последние / наиболее часто используемые части данных.

Пары ключ-значение подразумевают Maps, которые обычно являются коллекциями пар ключ-значение.Однако существует множество способов реализации Map, от простого массива (требуются последовательные ключи, все целые числа) до B-деревьев ключей со связанными ссылками на их значения.

Не зная, каковы рабочие характеристикидолжно быть для программы, невозможно узнать, достаточно ли хорош алгоритм или структура данных для размера набора данных.

Полный список в алфавитном порядке, упорядоченный список пар ключ-значениебыстрый.Поиск с полным ключом доступен, HashMap (или алгоритм, основанный на хэше) будет вам полезен.Поиск по шаблону, который может частично совпадать с ключами, возможно, будет лучше использовать Tree of Keys, упорядоченный для облегчения поиска.Короче говоря, это зависит от того, как будут использоваться данные, в дополнение к ожидаемому размеру набора данных.

1 голос
/ 17 ноября 2011

Возможно, вы захотите использовать TreeMap . Чтобы ответить на вопрос о том, как сделать это в памяти, все это не может быть сразу в памяти (по крайней мере, с сегодняшней стандартной технологией на настольном компьютере в 2011 году), которую вы хотите разделить на части. Поскольку информация уже отсортирована по древовидной карте, вы можете эффективно определить, используя двоичную сортировку или один из ее вариантов, куда в дереве она попадает. Trove не исправит исключение нехватки памяти, что связано с настройками JVM.

0 голосов
/ 17 ноября 2011

Все эти данные должны быть в памяти?Если ответ «нет», вы можете использовать базу данных и индексировать свои данные по ключу.

Если ответ на поставленный выше вопрос - «да»: какие объекты вы планируете хранить?могут ли они быть представлены как примитивные типы данных?Я бы посоветовал вам взглянуть на высокоскоростные коллекции, реализованные в библиотеке Trove .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...