Tuesday, April 06, 2010

Транзакционный эффект

Или точнее - эффект от отсутствия транзакций. Сравнение операций добавления данных в MongoDB и SQL server. Троекратная разница в пользу MongoDB.

7 comments:

Unknown said...

Вставка в один поток ни о чем не говорит.

Я попробовал h2database (полноценный sql сервер с ACId): 12000 вставок в секунду т.е. те же 40 сек.

Переделал тест на 10 потоков, скорость сразу упала до 1000 вставок в секунду.


Аналогичный тест для MSSQL 1500 однопоточно, 280 при 10 потоках.

MySQL (InnoDB) 3500 Ins/sec однопоточно и 1000 ins/sec на 10 потоках.


как пишут
http://www.mongodb.org/display/DOCS/Comparing+Mongo+DB+and+Couch+DB

MongoDB нет Durability т.е. это аналог myIASM


Также интересно провести тесты на выборку, на многопоточную выборку и вставку.

Unknown said...

fix: MySql 500 ins/sec на 10 потоках.

На 20 потоках MySQL и h2 почти не сбавили скорости.

Т.е. на нескольких потоках скорость одного потока падает, но суммарная скорость растет, до 15-30 потоков (далее сильная деградация).

Unknown said...

Финальный эксперимент:
- более сложная таблица (4 поля, причем одно длинное, PK, index по двум varchar(20))
- 20 потоков одновременно вставляют - по 50ты записей = 1млн записей
- тесты на простом ноуте 2Mb RAM

h2: avg = 129 , max = 187, min=109
mysql: avg = 130 , max = 172, min=72

Unknown said...

Т.е. основной посыл был такой:

если в одном потоке, да батчем, то h2database вставляет 500 000 за 25 сек, т.е. будучи полноценным SQL сервером работает быстрее этой NoSQL.

Coldbeans software said...

>да батчем
имеется в виду, что commit вызывался 1 раз для всего? А разве это будет типичной ситуацией для веб-приложения? Наоборот - много маленьких вставок.

Unknown said...

Если автокоммит, то 40 сек на одном потоке.

Батч = много вставок, потом коммит - сильно быстрее. В принципе же на действие пользователя может идти несколько разных вставок в разные таблицы - можно вставлять, а потом делать финальный коммит.

Unknown said...

Гонка вооружений.
Знакомый запустил мой тест на мощном железе и платной редакции MSSQL2008:

10 потоков avg=1031, max=1061, min=1006 ins/sec
20 потоков avg=505, max=530, min=491
ins/sec

т.е. суммарная скорость вставки
1031*10 = 10310 ins/sec
500000/10310 = 48 сек
Попросил его протестировать на его сервере h2database, о результатах сообщу.