В средах высокоуровневой параллельной таблицы блоков SQLite с потерей данных. Я ищу способ улучшить производительность SQLite с высоким параллелизмом без потери данных для запроса вставки. Мое намерение состоит в том, чтобы знать лимит одновременных пользователей для вставки таким образом, чтобы сайт работал (в данном случае 1 вставка для запроса) с «высоким параллелизмом». Чтобы сделать этот тест более простым, пользователи будут отправлять данные для сохранения в базе данных
Посмотрев, как улучшить производительность и воспользоваться советами других пользователей:
- sqlite.org
- sqlite.org / faq.html # q19
- stackoverflow.com / вопросы / 1711631 / как-делать-я-улучшить-на-производительность-на-SQLite
- stackoverflow.com / вопросы / 54998 /, как масштабируемая-это-SQLite
Я решил провести небольшой тест в маленькой амазонке.
Платформа
- версия Linux 2.6.35.14-106.53.amzn1.i686 (mockbuild@build-31003.build) (версия gcc 4.4.5 20110214 (Red Hat 4.4.5-6) (GCC)) # 1 SMP пт 6 января 16 : 20: 23 UTC 2012
- Sqlite 3.6.20
- Lighttpd 1.4.29
- Php 5.3.10
test.php со вставкой sql:
PRAGMA синхронно = ВЫКЛ; НАЧАЛО СДЕЛКИ; INSERT INTO test
(data1
, date
) VALUES ('". $ _ POST [' data1 ']."', Date ());
КОНЕЦ СДЕЛКИ;
Используйте инструмент тестирования Apache HTTP-сервера.
База данных - это файл в файловой системе, но не в оперативной памяти.
ВЫВОД:
Тест 1: ab -n 10000 -c 50 -k xxxx.xxx/test.php?data1=fc82bf71a0d5f8a3c2dc868ebe0d6eaa
- Время, затраченное на тесты: 63,637 секунд
- Полные запросы: 10000
- Сбой запросов: 0
- Sqlite вставленных строк: 10050
- Среднее: 159,52 вставки / сГ
Тест2: ab -n 10000 -c 100 -k xxxx.xxx/test.php?data1=fc82bf71a0d5f8a3c2dc868ebe0d6eaa
- Время, затраченное на тесты: 64,221 секунды
- Заполнено запросов: 10000
- Сбой запросов: 0
- Sqlite вставленных строк: 10100
- Среднее: 157,26 вставки / сГ
Тест 3: ab -n 10000 -c 150 -k xxxx.xxx/test.php?data1=fc82bf71a0d5f8a3c2dc868ebe0d6eaa
- Время, затраченное на испытания: 33,338 секунды
- Полные запросы: 10000
- Неудачные запросы: 7095
- (соединение: 0, получение: 0, длина: 7095, исключения: 0)
- SQLITE: 2905 вставленных строк
- Среднее: УТЕРЯННЫЕ ДАННЫЕ !!
TEST4: ab -n 10000 -c 200 -k xxxx.xxx/test.php?data1=fc82bf71a0d5f8a3c2dc868ebe0d6eaa
- Время, затраченное на испытания: 33,705 секунд
- Заполнено запросов: 10000
- Неудачные запросы: 7049
- (соединение: 0, получение: 0, длина: 7049, исключения: 0)
- SQLITE: 2918 вставленных строк
- Среднее значение: УТЕРЯННЫЕ ДАННЫЕ !!
В этой специфической среде мы можем использовать SQLite до 100 одновременно работающих пользователей со средним значением 157,26 insert / sg. Вы учитываете этот результат только для вставки данных.
Из-за моего невежества можно ли предотвратить потерю данных? Можно ли улучшить эту производительность?