технические проблемы и идеи, родившиеся в бурных водах реки Abava (а равно как и на ее берегах, далеких и близких), выставленные на всеобщее обсуждение
Tuesday, April 06, 2010
Транзакционный эффект
Или точнее - эффект от отсутствия транзакций. Сравнение операций добавления данных в MongoDB и SQL server. Троекратная разница в пользу MongoDB.
Финальный эксперимент: - более сложная таблица (4 поля, причем одно длинное, PK, index по двум varchar(20)) - 20 потоков одновременно вставляют - по 50ты записей = 1млн записей - тесты на простом ноуте 2Mb RAM
h2: avg = 129 , max = 187, min=109 mysql: avg = 130 , max = 172, min=72
>да батчем имеется в виду, что commit вызывался 1 раз для всего? А разве это будет типичной ситуацией для веб-приложения? Наоборот - много маленьких вставок.
Батч = много вставок, потом коммит - сильно быстрее. В принципе же на действие пользователя может идти несколько разных вставок в разные таблицы - можно вставлять, а потом делать финальный коммит.
т.е. суммарная скорость вставки 1031*10 = 10310 ins/sec 500000/10310 = 48 сек Попросил его протестировать на его сервере h2database, о результатах сообщу.
7 comments:
Вставка в один поток ни о чем не говорит.
Я попробовал 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
Также интересно провести тесты на выборку, на многопоточную выборку и вставку.
fix: MySql 500 ins/sec на 10 потоках.
На 20 потоках MySQL и h2 почти не сбавили скорости.
Т.е. на нескольких потоках скорость одного потока падает, но суммарная скорость растет, до 15-30 потоков (далее сильная деградация).
Финальный эксперимент:
- более сложная таблица (4 поля, причем одно длинное, PK, index по двум varchar(20))
- 20 потоков одновременно вставляют - по 50ты записей = 1млн записей
- тесты на простом ноуте 2Mb RAM
h2: avg = 129 , max = 187, min=109
mysql: avg = 130 , max = 172, min=72
Т.е. основной посыл был такой:
если в одном потоке, да батчем, то h2database вставляет 500 000 за 25 сек, т.е. будучи полноценным SQL сервером работает быстрее этой NoSQL.
>да батчем
имеется в виду, что commit вызывался 1 раз для всего? А разве это будет типичной ситуацией для веб-приложения? Наоборот - много маленьких вставок.
Если автокоммит, то 40 сек на одном потоке.
Батч = много вставок, потом коммит - сильно быстрее. В принципе же на действие пользователя может идти несколько разных вставок в разные таблицы - можно вставлять, а потом делать финальный коммит.
Гонка вооружений.
Знакомый запустил мой тест на мощном железе и платной редакции 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, о результатах сообщу.
Post a Comment