Чтение / Запись / Хранение чрезвычайно больших наборов последовательных данных - PullRequest
4 голосов
/ 21 января 2011

Я взаимодействую с большими последовательными наборами данных в Java. В идеале я ищу библиотеку, в которой я могу хранить потоковые данные (думать о последовательностях неизменяемых объектов), а затем просматривать полученные данные позже. В конечном итоге данные должны храниться на диске и не должны храниться в памяти целиком. Данные будут состояниями математических систем - так что, в основном, это числа (двойные или даже большие десятичные числа), а также некоторые строки.

На данный момент это приложение для настольного компьютера, поэтому одновременно будет только один пользователь и, возможно, несколько одновременных подключений (несколько потоков объектов / состояний). Позже я могу рассмотреть распределенный подход и поддержку нескольких клиентов в одной и той же базе данных.

Я просматривал различные библиотеки NoSQL, но я не уверен, что подходит для моих нужд. Есть мысли?

Ответы [ 5 ]

2 голосов
/ 26 января 2011

Посмотрите на OrientDB : для вставок это очень, очень быстро.На мой блокнот вставляется 1 000 000 записей за 6 секунд.Кроме того, Java и может работать как встроенный в ваш процесс.

2 голосов
/ 21 января 2011

Если у вас есть какие-либо средства для вычисления смещения для каждого объекта, к которому вы хотите получить доступ, простой java.nio.MappedByteBuffer - эквивалент mmap - может сделать эту работу.

1 голос
/ 21 января 2011

Если у вас есть 64-битная JVM, вы можете отобразить файлы в памяти.Это даст вам окно размером до 2 ГБ для каждого файла.

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

0 голосов
/ 25 января 2011

Вы смотрели на Berkeley DB Java Edition ? Это было разработано для этого типа использования в виду. Большие наборы данных, высокая пропускная способность записи, надежное сохранение с набором API-интерфейсов, очень дружественных для Java-разработчиков. Вы можете использовать Base API (пары ключ / значение) , Collections API или JPA-подобный DPL (Direct Persistence Layer) API.

Есть отличное Руководство по началу работы , которое содержит примеры и объясняет различные API.

Есть много подобных вариантов использования вашего. На самом деле, Terracotta и Coherence оба используют Berkeley DB для постоянства. Как и Heretix, проект интернет-архива, Tibco и многие другие компании и проекты. Причина в том, что BDB обеспечивает необходимую производительность, надежность, масштабируемость, гибкость и простоту.

Отказ от ответственности: я один из менеджеров по продуктам в Berkeley DB, поэтому, естественно, я предвзят. Но ваш вариант использования звучит точно в соответствии с тем, для чего был разработан BDB.

Удачи в вашем проекте. Пожалуйста, дайте нам знать, если есть что-то, с чем мы можем помочь. Вы можете задать вопросы о Berkeley DB Java Edition на форумах OTN , где вы найдете большое сообщество активных разработчиков приложений Java.

С уважением,

Dave

0 голосов
/ 21 января 2011

Просто использовать бинарный файл?Легко, если ваши объекты равны по размеру;Вы можете использовать произвольный доступ для перемещения по файлу.Ваша операционная система будет использовать свой дисковый кеш, чтобы обеспечить вам кеширование бесплатно.Иногда люди используют базу данных и интерфейс SQL как золотой молот .

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