четверг, апреля 29, 2010

Быстрый способ обработать большой набор данных

Довольно стандартная минизадача - взять данные из одного или нескольких источников, сгруппировать и как-либо обработать их и выдать на выход в неком формате. Часто для группировки/обработки сильно помогает наличие SQL базы данных. Для минизадач напрашивается sqlite (для явы я использую http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC но и вариант zentus вроде бы тоже использовал раньше). При больших объёмах данных узким местом обычно становится время затрачиваемое на insert/update. И тут сильно помогает то что в sqlite есть memory режим (имя базы данных для задания в конекте :memory:), что сильно ускоряет insert/update операции. Вобщем разница видна на глаз уже где-то на наборе из 500К объектов, а при отладке экономия времени просто неимоверная.

2 комментария:

Andrew Fink комментирует...

Он же вроде native?

http://h2database.com не смотрели?
Тесты показывают его высокую скорость. Кроме того куча плюшек, в т.ч. in-memory databases присутствуют.

Лаврентий Палыч комментирует...

Да вроде native.

Про h2database вроде слышал но так и не пощупал. Есть подозрение что быстрее если и станет то уж с каких-то лимитов какие я пока не достиг при использовании sqlite (сходу нашёл только древний бенчмарк где sqlite быстрее на миллионе инсертов: http://voice.xerial.org/2008/11/comparison-between-sqlite-and-h2.html ).

Возможно попробую h2 для задач посложнее чем "написал, запустил, посмотрел на результат и забыл". В принципе по фичам выглядит интересно.