Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.12.2017, 10:34
Интересующийся
Отправить личное сообщение для jtag Посмотреть профиль Найти все сообщения от jtag
 
Регистрация: 12.01.2016
Сообщений: 19

Отправка запросов в БД
Всем добрый день. Сейчас отправляю запросы в mysql таким образом:
let x = 0;
setInterval(function(){
    connection.query("SELECT * FROM person WHERE x = '"+x+"' ... ", function() {
         x++;
    });
},500);


Из этого видно что setInterval абсолютно не видит когда приходит обратный ответ с БД. Время пол секунды, установлено приблизительно, т.к. я уверен чтоб БД уже завершила ответ. Как сделать чтобы после ответа сразу отправлялся след запрос? Существует какой-либо шаблон, по которому все пишут, а я вот его не знаю?
Ответить с цитированием
  #2 (permalink)  
Старый 06.12.2017, 10:52
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Зачем так бд сношать?
Ответить с цитированием
  #3 (permalink)  
Старый 06.12.2017, 11:00
Интересующийся
Отправить личное сообщение для jtag Посмотреть профиль Найти все сообщения от jtag
 
Регистрация: 12.01.2016
Сообщений: 19

события в бд поступают в реальном времени, строка за строкой. и нужно обрабатывать эти строки понемногу, вот и пытаюсь придумать цикл для обработки.
Ответить с цитированием
  #4 (permalink)  
Старый 06.12.2017, 11:07
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

jtag, что значит "события поступают в бд"?
Ответить с цитированием
  #5 (permalink)  
Старый 06.12.2017, 11:11
Интересующийся
Отправить личное сообщение для jtag Посмотреть профиль Найти все сообщения от jtag
 
Регистрация: 12.01.2016
Сообщений: 19

события т.е. новые строки
Ответить с цитированием
  #6 (permalink)  
Старый 06.12.2017, 11:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от jtag
т.к. я уверен чтоб БД уже завершила ответ
Ну выборка из БД не ради шутки же, а нужны ее данные, а ответил ли sql-сервер и если да, то чем узнают не по уверенности, а проверкой ответа.
Ответить с цитированием
  #7 (permalink)  
Старый 06.12.2017, 11:14
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

jtag, что мешает уже обработанным строкам добавлять флаг (либо хранить где-нибудь последний обработанный id) и запрашивать у бд сразу некоторое кол-во записей, которые нужно обработать?
Зачем каждые пол секунды долбить бд новым запросом?
Быстрее она от этого работать не станет.
Ответить с цитированием
  #8 (permalink)  
Старый 06.12.2017, 13:04
Интересующийся
Отправить личное сообщение для jtag Посмотреть профиль Найти все сообщения от jtag
 
Регистрация: 12.01.2016
Сообщений: 19

Незнаю можно ли тут обсуждать БД, но вот что у меня получается. Вначала я делаю выборку одним разом всех не обработанных строк. Потом в цикле начинаю обрабатывать каждую строку, т.е. делаю запрос в БД, существует ли такой ИИН, если нет такого, то вставляю в базу. Потом вставляю телефон, и делаю запрос - отмечаю необработанную строку флагом "обрабатано". Получается, мне нужно все используемые таблицы скопировать и потом с ними в обычном цикле for производить операции?
let x = 0;
con.query("SELECT * FROM xml_person WHERE done='0'", function (err, resultFromXml) { //запрос всех необработанных строк
		setInterval(function () {
			con.query("SELECT * FROM person  WHERE iin='" + resultFromXml[x].iin + "'", function (err, resultFromPerson) { //проверка, имеется ли такой ИИН в базе
				if (resultFromPerson.length == 0) {  
					con.query("INSERT INTO `person` (`idperson`, `iin`, `surname`, `name`,..., function(err) {		//вставка person

						con.query("INSERT INTO `phone` (`id`, `phone`," ... function(err) {		//вставка телефона
							con.query("UPDATE xml_person SET done='4' WHERE id_xml_person='" + resultFromXml[x].id_xml_person, function(err) {  //ставлю флаг, что строка обработана
								x++;
							}
						}
					});
				}
					
			});
		}, 500);
		
}
Ответить с цитированием
  #9 (permalink)  
Старый 06.12.2017, 13:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

jtag,
я не знаю node.js, но как можно обрабатывать результат запроса не зная, что он вернул? А если запрос завершился неудачей?
Ответить с цитированием
  #10 (permalink)  
Старый 06.12.2017, 13:29
Интересующийся
Отправить личное сообщение для jtag Посмотреть профиль Найти все сообщения от jtag
 
Регистрация: 12.01.2016
Сообщений: 19

я просто сократил и вырезал, а так там конечно, ошибки обрабатываются.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
несколько запросов ajax anton41k AJAX и COMET 0 15.09.2014 21:31
Поиск и устранение причины странных запросов AndrewP Работа 2 29.11.2013 14:10
нужна отправка post запросов через jQuery в формате Json mstdmstd Events/DOM/Window 2 31.05.2012 15:08
Очередь XML запросов Евгений М AJAX и COMET 4 01.02.2012 11:05
Отследить окончание нескольких ajax запросов mikel AJAX и COMET 2 11.03.2011 17:14