Попробуйте sg-cdb (странный порт gizmo cdb djb), а затем поменяйте файл RandomAccessFile на BufferedRandomAccessFile (есть хороший пример в коде jai-imageio).
Я получаю умопомрачительное сочинение. Через крышу (потому что все это буферизовано, затем совершено одним махом).
Однако производительность чтения для буферизованного RAF не изменилась.
Я мог бы потратить время на сравнение с массовым импортом H2, может быть сравним, хотя и не уверен.
База данных проста: ключ => значение. Поиск поддерживается только на ключ.
В моем случае это ключи (случайные числа в кодировке base32 + уникальные int в кодировке base32), так что местность не особо помогает. Значения представляют собой массивы из 120 случайных байтов.
нагрузок (вставка sql)
h2, с кешем 131 МБ (включая сброс, не запуск):
4 мая 2011 г. 23:45:10 test.TestH2Simple main
: добавленные вставки добавлены в: 101625 мс
размер базы данных:
Около 140 МБ
размер партии: 2000
: выполненные вставки добавлено в: 116875 мс
размер партии: 10000
: вставлено выполнено добавлено: 70234 мс
сравнить с портом sg-cdb (странная штуковина) cdb:
с RandomAccessFile:
вставка без сброса: 21688 мс, сбрасывание: 30359 мс, всего: 52047 мс
размер файла на диске:
66,1 МБ (69 316 632 байта)
с BufferedRandomAccessFile:
около 6,5 секунд
конечно, это не совсем справедливое сравнение, поскольку H2 непрерывно сбрасывает данные во время вставки, тогда как sg-cdb - нет. Это следует учитывать при выполнении сравнения. Вероятно, было бы справедливо сравнить вставку sg-cdb с массовой вставкой H2
читает (sql select)
SG-CDB
: поиск: 490000
закончено: 1304544550439 занято: 17547 мс, счетчик: 0
H2
: выбор выполняется за: 19579 мс
Относительно файлов, отображаемых в память:
кажется, они не то, что вы ищете. Отличная производительность при работе с файлами MMap - это когда вы отображаете в памяти около 100 МБ или более (мой опыт).