Проблема здесь не в поиске большого массива JSON. Во-первых, вы не выполняете поиск в базе данных.
Сначала вы выбираете 100 000 строк в своей базе данных и используете его для инициализации 100 000 объектов модели. Это не только займет много времени, но и потребляет гигантский c кусок оперативной памяти.
Вы затем go проходите и сериализуете эту коллекцию из 100 000 строк в мега длинную строку JSON, которая съедает еще больше оперативной памяти.
Затем он отправляется через inte rnet бедному клиенту, который получает ответ монстра JSON и исчерпывает данные своего мобильного плана. Даже если вы внедрили некую разновидность стека magi c, которая феноменально быстро увеличивает затраты, если просто получить здесь данные ошеломляют.
Кэширование может немного ускорить работу на стороне сервера, но на начальном этапе оно ничего не изменит «холодный» кеш или объем данных, передаваемых по проводам, и объем оперативной памяти, который он будет использовать на клиенте.
Реализация поиска на стороне сервера, такого как в geonames или google, на самом деле довольно сложная задача, и вы можете хочу исследовать существующие варианты.
Действительно наивная реализация будет:
@locations = Location.where(
"canonical_name like ?", "%#{params[:query]}%"
).select(:id, :canonical_name)