Ответ 1
Я думаю, что это несколько факторов.
- Вы загружаете HTTP, который в основном является протоколом с более высокой задержкой. В частности, вы создаете TCP-соединение с нуля, используя
curl
. (Веб-браузеры и большинство клиентских программ поддерживают пул постоянных соединений HTTP/1.1 keepalive.) Но в сущности CouchDB выбирает "медленный" протокол, потому что он настолько универсален и настолько стандартен. - Ваши документы имеют больший размер для CouchDB. Большинство документов представляют собой одно- или двузначные КБ, а не тройные. CouchDB кодирует/декодирует, что JSON в одном большом gulp (т.е. Не передает потоки с диска).
- Не только EC2 (даже EBS) i/o менее, чем идеальный для базы данных (он сам имеет высокую задержку), но он также может колебаться, поскольку ваши соседи генерируют неизвестные всплывающие окна ввода/вывода, с которыми вы конкурируете.
- CouchDB - это файловая система поверх файловой системы. Файл .couch похож на файловую систему. Таким образом, вы умножаете неэффективность. Файл .couch и метаданные требуют случайного ввода/вывода для хранения; и чтение документа требует случайного ввода-вывода в файле
.couch
. Вы можете увидеть, как эффекты задержки диска умножаются. Вместо сравнения чтения документа и чтения файла файловой системы вы можете сравнить чтение документа или чтение эквивалентной строки MySQL.
Заметьте, я не говорю, что CouchDB на самом деле быстро и ваши результаты неверны. Совсем наоборот: CouchDB работает медленнее, чем ожидают многие люди. В какой-то степени у него есть возможности для улучшения и оптимизации; но в первую очередь CouchDB решил, что эти затраты стоят того, чтобы принести больше пользы.
CouchDB терпит неудачу в тестах, и у него сложный стул. Я предлагаю вам выполнить следующую проверку полной загрузки на CouchDB, моделируя ожидаемый спрос на несколько одновременных доступов и максимально приближайся к вашим реальным требованиям. Это будет более полезным тестом, и, вообще говоря, CouchDB впечатляет там.
Тем не менее, CouchDB - это база данных, специфичная для домена, и поэтому может показаться, что вы ищете другой инструмент.