Несколько дней назад я реализовал систему для автозаполнения предложений, которая работает со словарем в зависимости от языка. Вот как это работает: JQuery UI autocomplete -> вызов в файл .php -> вызов функции VB6 COM dll -> вызов файла .sqlite и поиск результатов на основе введенных букв -> возврат результатов в php -> возврат результатов в JS.sqlite & windows: Недостаточно памяти для завершения этой операции, и CoInitialize не был вызван
Он работает достаточно быстро, как в случае, для выполнения каждой операции требуется в среднем ~ 7 (миллисекунды). В часы пик Google Analytics показывает ~ 1200 онлайн-пользователей, и обычно каждый день мы получаем ~ half a million
звонки на эту функцию.
Со дня эта система предложение автозаполнения пошел онлайн я начал замечать сотни двух очень конкретных сообщений об ошибках:
Not enough storage is available to complete this operation.
CoInitialize has not been called.
некоторая информация, которая может помочь:
а) появляются эти сообщения в основном во время пика Посетители: horus
b) Они не всегда отображаются только с определенной функцией, но и с другими (но никогда не было до того, как мы реализовали вышеупомянутую систему)
с) я использовал базы данных SQLite, прежде чем для других вещей (не так много «реального времени», хотя, как и в возвращающимся результаты, когда пользователь), но никогда не такая проблема появилась
г) размер SQLite файл составляет ~ 350 МБ с 3 таблицами, один из которых имеет ~ 2,2 млн записей, другой - 1,6 млн, а остальные - 16 тыс. записей и все необходимые столбцы индексируются.
е) Очевидно, что эта база данных используется только для чтения операций
F) После того, как система получает отключенными, все сообщения остановки.
г) я получаю около тысячи таких сообщений об ошибках каждый день для каждого сообщения (около 500,000 обращений к функции/день)
Серверная система состоит из двух (x2) Боксы: Core i7 4770 на 3, 8 ГГц, 32 ГБ оперативной памяти, Windows Server 2012 и IIS.
Сообщения появляются случайным образом и только в часы пик. Я не могу воспроизвести проблему на машине разработки. Поиск в Интернете до сих пор был бесплодным. Любые идеи о том, что вызывает это и как решить, были бы более чем приятными.
спасибо.
Должен спросить, почему в середине есть компонент vb6 com? PHP может с радостью общаться непосредственно с SQLite. –
Так как все инструменты для словаря начинаются, все операции происходят в vb6 com dll, есть вещи, которые потребуют много времени для переноса на php (что, вероятно, будет немного медленнее). повторная реализация этой конкретной функции в php была бы моим последним средством – MIrrorMirror
Для вашего соединения с базой данных sqlite используются значения cache_size и page_size? –