#javascript #json #ajax #database
#javascript #json #ajax #База данных
Вопрос:
Мне требуется служба, которая будет запускаться каждые 15 минут, чтобы генерировать «актуальный» JSON для использования нашими службами AJAX. Мы хотим использовать этот JSON для анализа показателей, диаграмм и всего такого прочего.
Причина запуска каждые 15 минут заключается в том, что генерация JSON выполняется долго — выполнение запросов занимает не менее 45-60 секунд. Ожидается, что это будет увеличиваться по мере увеличения потребностей нашего приложения.
РЕДАКТИРОВАТЬ: мы извлекаем все наши данные из базы данных SQL. У нас уже настроена огромная реляционная база данных. Получение данных в быстрые и эффективные сроки для наших веб-пользователей абсолютно необходимо. Следовательно, запрашивать у базы данных все данные, которые нам нужны для показателей «на лету», неудовлетворительно, поскольку это занимает слишком много времени.
РЕДАКТИРОВАТЬ 2 Данные необходимо полностью восстанавливать каждые 15 минут. Данные JSON должны быть доступны практически мгновенно. Нас не волнует, занимает ли фоновая служба много времени, если она генерирует наш JSON каждые 15 минут.
Проблема в том, что я не уверен, как сохранить этот JSON. Будет создано не менее 30-40 отдельных объектов JSON, которые будут сериализованы в строки для передачи. Я не уверен, как мне следует хранить эти строки. Кроме того, эти 30-40 будут только увеличиваться с течением времени. У нас также есть предустановленные периоды времени для генерации JSON, это 1 день, 1 неделя, 1 месяц, 3 месяца, 6 месяцев, 1 год, 2 года.
Я рассмотрел плоскую таблицу базы данных, хотя я ненавижу таблицы, в которых десятки столбцов и только одна строка (мне это кажется неправильным). Я задавался вопросом, можно ли было бы сгенерировать какой-либо файл «data.json» на сервере, из которого службы будут извлекать данные при необходимости, но страдает ли это от каких-либо недостатков? Можно ли его кэшировать? (кэширование подорвало бы смысл этого).
Доступен ли какой-либо другой метод? Может ли эксперт высказать твердое мнение по этому поводу?
Комментарии:
1. Вы хотите хранить / манипулировать json? используйте Mongodb
2. Я думаю, это зависит от того, что вы ожидаете делать с данными после их создания. Если его единственная цель — статическое обслуживание, я не понимаю, почему вы должны просто сохранять их в виде файлов: Это быстро, просто и хорошо масштабируется.
3. Это то, что я подумал, хотя меня просто беспокоило, будет ли браузер кэшировать
mydata.json
файл. Из того, что я прочитал, это не так. По сути, все, что мы делаем, это получаем JSON, анализируем его на стороне клиента и используем для нашей системы показателей. Меня беспокоит скорость и эффективность. На данный момент не имеет значения, занимает фоновая служба 10 секунд или 10 минут для завершения. Конечный JSON, который должен быть доступен немедленно / instantly, делает.4. Вы можете указать браузеру, кэшировать файл или нет, и как долго файл должен кэшироваться в заголовке. Вы также можете изменить имя файла, чтобы отразить содержимое.
5. Ах да! Вы можете, я совсем забыл о
$.AJAX({cache:false})
команде. Спасибо, что напомнили мне.
Ответ №1:
Поскольку данные будут обрабатываться статически, а не генерироваться «на лету», я предлагаю просто сохранить их в виде текстовых файлов. Это быстро, просто и хорошо масштабируется. Легко создать архив старых данных, или вы можете просто перезаписать старые файлы, если вам не нужна история.
Чтобы избежать кэширования файлов json, вы также можете сделать это на стороне клиента
$.ajax({ cache: false })
Или вы можете сделать это на стороне сервера заголовков при обслуживании файла. Здесь вы также можете установить время кэширования равным 15 минутам, чтобы минимизировать нагрузку на ваш сервер. Как это делается, зависит от того, какую технологию вы используете.
Ответ №2:
Я думаю, что вы рассматриваете этот пример как единственный источник ваших данных, взглянув на API какой-либо другой гигантской компании (Tumblr., Facebook и т.д.).
Но я хотел бы прояснить для вас, что использование базы данных для хранения данных было бы более эффективным по сравнению с хранением данных в формате JSON.
Хранение данных в файле потребует от вас создания собственных плагинов для обработки данных внутри файла, чтобы определить, соответствуют ли данные, соответствует ли пользовательский ввод, совпадают ли данные, если совпадают, какие другие данные могут относиться к ним. Это было бы отличным временем для кодирования для вас. С другой стороны, если вы используете базы данных, вы можете просто выбрать нужные строки и СТОЛБЦЫ, создать строку JSON из возвращаемых данных, а затем передать ее клиенту в виде объекта JSON. Это то, что вы хотите.
Используйте базу данных, создайте таблицу для каждого возможного объекта JSON, который вы будете использовать. Вот так
ObjId | ObjName | ObjProperty
1 | User | Employee
2 | User | Client
Это пример таблицы для вас. Как только вы закончите с сохранением этих данных. Вы всегда можете получить данные обратно с помощью простого SELECT
заявления в виде
SELECT * FROM table_name WHERE ObjId = 1
Теперь вам будет возвращена первая строка. Постройте его, затем верните в виде строки клиенту для работы с ним.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
Комментарии:
1. Привет, извините, я отредактировал свой первоначальный вопрос, чтобы дать немного больше объяснений. Я не думаю, что я объяснил достаточно хорошо.