я могу предложить свой опыт на подобный опыт, но с другой платформы, а именно J.
Существовал некоторые медленность, и я точно определили его функции sqlite3_get_table
. Эта функция возвращает указатель для каждого столбца, каждый из которых указывает на массив указателей, где каждый из них ссылается на строку с нулевым завершением. Указатели также могут быть нулевыми, если результат функции равен нулю (скажем, Max на пустом наборе данных, он вернет нулевой указатель, а не указатель на нуль. Я ненавижу это.) J затем сформировал адреса как читаемые (образуют большую матрицу адресов, за которой следует 0 для смещения и -1 для длины, что означает до первого нуля) и циклически проходит через каждую, чтобы окончательно переформатировать таблицу в ее предполагаемых столбцах и строках.
Итак, есть аспект передачи памяти, а также фактический аспект чтения, чтобы получать данные из SQLite на другую платформу. Я обнаружил, что этот частотный массив данных нелегко обрабатывается J, а это означает, что он неуклюж, как все строки. Плюс есть эта неприятная вещь с нулевым указателем.
Мне удалось ограничить модификации матрицы, чтобы оптимизировать функцию. Последняя оптимизация заключалась в использовании примитивного кода для чтения адреса памяти (15!:1
) и не порядочно названной функции (memr
), поскольку использование memr означало, что J должен был интерпретировать то, что memr
означает в каждой памяти, прочитанной.
В заключение, если python допускает некоторые изменения, возможно, вы можете настроить доступ к базе данных для лучшего удовлетворения ваших потребностей. Я надеюсь, что это поможет, но у меня нет особых надежд ...
Я проверил это. Это последняя версия. При установке pysqlite вы можете фактически сказать, что он загружает и создает последнюю версию, что я и сделал. –
Было бы полезно, если бы вы могли дать больше информации о том, какие платформы, в каких версиях python, какие версии pysqlite2, какие apsw-версии и какие версии sqlite3 вы используете где. В вашем вопросе так много движущихся целей, трудно знать, с чего начать. –