Тригнометрические функции в npm sqlite/sqlite3/ лучше-sqlite3
В настоящее время я работаю над веб-приложением nodejs, которое хранит долготу / широту различных зданий по всей Великобритании в файле json, а затем загружает карты Google, позволяя пользователю искать свое ближайшее здание по их текущему местоположению.
Все это работает хорошо, за исключением того, что в файле json хранится много других данных о зданиях, и его размер составляет около 5 МБ, поэтому загрузка, которую каждый раз, когда пользователь хочет выполнить поиск по моей карте, действительно использует пропускную способность и, конечно, является плохим пользовательским опытом.
Чтобы уменьшить это, я переместил данные json и поместил их в имеющуюся у нас локальную базу данных MSSQL, и улучшил их так, чтобы при поиске по sql можно было выбрать 5 ближайших зданий на основе геопространственного поиска (состоящего из некоторых сложных триггерных функций, таких как: показано здесь: http://daynebatten.com/2015/09/latitude-longitude-distance-sql/).
2 * 3961 * asin(sqrt((sin(radians((lat2 - lat1) / 2))) ^ 2 + cos(radians(lat1)) * cos(radians(lat2)) * (sin(radians((lon2 - lon1) / 2))) ^ 2)) as distance
Это прекрасно работает, я могу предоставить пользователям long / lat и базу данных, и я получу 5 ближайших хранилищ - сгенерированный JSON составляет около 1 КБ, который я использую для заполнения своей карты. Но я столкнулся с загадкой... Код должен быть размещен на производственном сервере, который не может запустить MSSQL.
Итак, я смотрю на альтернативы, и, надеюсь, что-то встроено. Я собирался согласиться на пакет npm 'лучше-sqlite3' ( https://www.npmjs.com/package/better-sqlite3) - за исключением того, что он не поддерживает расширенные математические функции, которые мне нужно использовать.
Я провел небольшое исследование и у меня есть 2 варианта:
Напишите тригонометрические функции для моей локальной базы данных, как описано здесь: тригонометрические функции в sqlite в iphone sdk и http://www.sqlite.org/c3ref/create_function.html
Существует библиотека расширений, доступная по адресу https://www.sqlite.org/contrib(последняя ссылка называемая extension-functions.c), что означает, что мне придется скомпилировать свою собственную версию sqlite.
Итак, мой вопрос: кто-нибудь знает, как включить функции триггера в стандартный npm лучше-sqlite3?
Я хотел бы иметь возможность сделать npm install better-sqlite3
и получить код работает. Было бы замечательно, если бы это была не полная перестройка sqlite3 (и если это единственное решение, то любая помощь по его сборке и добавлению в проект узла была бы полезной), так как это происходит на рабочем сервере.