Страницы

Tuesday, April 06, 2010

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

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

7 comments:

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

    Я попробовал 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


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

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

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

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

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

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

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

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

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

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

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

    ReplyDelete
  7. Гонка вооружений.
    Знакомый запустил мой тест на мощном железе и платной редакции 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, о результатах сообщу.

    ReplyDelete