Один официальный сайт leveldb (http://code.google.com/p/leveldb/), есть отчет о производительности. Я вставил, как показано ниже.
Ниже приведен официальный тест leveldb
Вот отчет об эффективности (с пояснениями) из запуска включенной программы db_bench. Результаты несколько шумные, но их должно быть достаточно, чтобы получить приблизительную оценку производительности.
Настройка
Мы используем базу данныхс миллионом записей. Каждая запись имеет 16-байтовый ключ и 100-байтовое значение. Значения, используемые эталонным тестом, сжимаются примерно до половины их первоначального размера. LevelDB: версия 1.1
ЦП: 4 x Intel (R)Core (TM) 2 Quad CPU Q6600 @ 2,40 ГГц
CPUCache: 4096 КБ
Ключи: 16 байт каждый
Значения: 100 байт каждый (50 байт после сжатия)
Записи: 1000000
Необработанный размер: 110,6 МБ (по оценкам)
Размер файла: 62,9 МБ (по оценкам)
Производительность записи
Тесты "fill" создают совершенно новую базу данных, либо впоследовательный или случайный порядок.
Тест "fillsync" сбрасывает данные из операционной системы на диск после каждой операции;другие операции записи оставляют данные на некоторое время в буферном кеше операционной системы.Тест «перезаписи» выполняет случайную запись, которая обновляет существующие ключи в базе данных.
fillseq: 1.765 micros / op;62,7 МБ / с
fillsync: 268,409 мкс / с;0,4 МБ / с (10000 операций)
, случайное заполнение: 2,460 микро / операция;45,0 МБ / с
перезапись: 2,380 мкс / с;46,5 МБ / с
Каждая описанная выше операция соответствует записи одной пары ключ / значение.То есть, тест случайной записи идет со скоростью приблизительно 400 000 операций записи в секунду .
Ниже приведен тест My leveldb
Я провел некоторые тесты для leveldb, но получил скорость записи в 100 разменьше, чем отчет.
Вот мои настройки эксперимента:
- Процессор: Intel Core2 Duo T6670 2,20 ГГц
- 3,0 ГБ памяти
- 32-битная Windows 7
- без сжатия
- options.write_buffer_size = 100 МБ
- options.block_cache = 640 МБ
То, что я сделал, очень просто: я просто положил 2 миллиона{ключ, значение} и нет чтения вообще.Ключ представляет собой байтовый массив, который имеет 20 случайных байтов, а значение также является байтовым массивом со 100 случайными байтами.Я постоянно добавляю новые случайные {ключ, значение} 2 миллиона раз, без каких-либо операций.
В моем эксперименте я вижу, что скорость записи уменьшается с самого начала.Мгновенная скорость (измерение скорости каждых 1024 операций записи) колеблется от 50 / с до 10 000 / с.И моя средняя средняя скорость записи для 2 миллионов пар составляет около 3000 / с.Пиковая скорость записи составляет 10 000 / с.
Поскольку в отчете утверждается, что скорость записи может составлять 400 000 / с, скорость записи моего теста составляет 40В 130 раз медленнее и мне просто интересно, что не так с моим тестом.
Мне не нужно вставлять сюда свои тестовые коды, потому что это очень просто, у меня просто есть цикл while для 2 миллионов раз, и внутри цикла для каждой итерации я генерирую 20 байтов ключаи 100 байтов значения, а затем поместите их в базу данных leveldb.Я также измерил время, потраченное на генерацию {key, value}, оно составляет 0 мс.
Может кто-нибудь помочь мне с этим?Как я могу достичь скорости записи 400 000 / с с помощью leveldb?Какие настройки я должен улучшить?
Спасибо
Более того
Я только что запустил официальный файл db_bench.cc на своем компьютере.Это в 28 раз медленнее, чем отчет.
Я думаю, что когда я использовал их собственную программу тестирования, единственное различие между моими и их тестами - это машина.