Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2016, 13:06   #41
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а надо ли вообще парится с соединениями и порядком?
может стоит на стороне клиента склеивать, скажем раз в посекунды, и ставить TimeStamp на стороне клиента.
перед отправкой.

ибо если вы хотите http, то с такой массой запросов, вы тупо будете время терять на каждый.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.08.2016, 18:33   #42
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а надо ли вообще парится с соединениями и порядком?
может стоит на стороне клиента склеивать, скажем раз в посекунды, и ставить TimeStamp на стороне клиента.
перед отправкой.

ибо если вы хотите http, то с такой массой запросов, вы тупо будете время терять на каждый.
Вы имеете ввиду программой 1 отсылать данные с меньшей частотой. Т.е . соединить несколько кликов за несколько секунд и отсылать одним запросом? Если так, то это не желательно. Должна быть "отзывчивость" поступления кликов на сервер программой 1 и считывание этих данных программой 2 с сервера.

Я понимаю что запросов может быть немало, учитывая сколько я планирую одновременно работающих таких связок. Я планирую , что сервер выдержит порядка 150+ запросов в секунду. ( ну как сервер VPS дешевенький)

Тут, конечно, палка о двух концах:
- С одной стороны если я сделал объединение нескольких кликов сразу для отправки на сервер программой 1, если они были сделаны чаще 1 раза в секунду. Для уменьшения кол запросов. ( Но в программе 2 все равно эти клики не отработаю быстрее чем за 0.8-1 секунду, т.е. программе 2 вообще не нужна скорость быстрее 1 раза в секунду).

- С второй стороны, если бы я оставил отправку каждого клика отдельно сразу же как он появляется, то ( если частота более 1 в секунду) этот клик статистически появится раньше на сервере и с определенной вероятностью может раньше прочитаться программой 2. Т.е, быстродействие связки несколько выше в среднем получится.

Это все компромисс между скоростью и нагрузкой на сервер.

Но, если частота кликов от программы 1 будет не чаще 1 раза в секунду, то алгоритмы работы 2х вариантов будут одинаковые.

Я понимаю, что время на отсылку post запросов будет тратиться больше чем его обработка, но это уже проблема касающаяся моей неопытности в применении технологий. Пока что, вариант только с обыкновенными Post запросами.

Но микросекунды вроде как не поддерживаются в mysql, ну или по крайней мере в моей версии Mysql 5.5.41 ,а в 5.6.4 вроде уже можно(.

П.С. Возможно, я неправильно Вас понял.

predefined
, по поводу #39 . Да я все это понял. Формировать timestamp или же счетчик буду непосредственно в программе 2 перед отправкой на сервер. По видимому придется через счетчик, так как в микросекундах просто записать в бд не получится из-за версии, ну и придумывать для этого костыли не хочется.

Последний раз редактировалось Illusiony; 24.08.2016 в 19:52.
Illusiony вне форума Ответить с цитированием
Старый 27.08.2016, 17:23   #43
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Ошибочка в предпоследнем предложении, в программе 2, нужно программе 1
Illusiony вне форума Ответить с цитированием
Старый 27.08.2016, 21:35   #44
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
Я планирую , что сервер выдержит порядка 150+ запросов в секунду. ( ну как сервер VPS дешевенький)
Посмотрите статью на Хабре 36 млн запросов в час, 10000+ постоянно работающих клиентов, на одном сервере, nginx+mysql . Там рекомендуют отключать query-cache в таблицах MySQL. nginx вам не потребуется - это кэширующий веб-сервер чтобы отдавать статику (картинки, стили, яваскрипты и статические html-страницы).

150+ запросов в секунду это совсем не много. Но если будет больше - возможно, потребуется тюнинг сервера (или даже ядра ОС), чтобы он держал большое число коннектов.

Последний раз редактировалось predefined; 27.08.2016 в 21:40.
predefined вне форума Ответить с цитированием
Старый 28.08.2016, 10:11   #45
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

predefined, спасибо , но в данный момент этот VPS серверок за 5 баксов используется как резервный для другого проекта, для которого nginx нужен. Сейчас я его использую для этого проекта и в дальнейшем пока хватит "мощности", если не будет хватать перенесу на новый. Для VPS за 5 баксов 150 + запросов в секунду я думаю это нормально и не требует особых наворотов. Да И проект не такого масштаба чтобы уж слишком замарачиваться чтобы сэкономить несколько долларов.

В общем спасибо. Сейчас активно работаю над всем.

Последний раз редактировалось Illusiony; 28.08.2016 в 15:52.
Illusiony вне форума Ответить с цитированием
Старый 28.08.2016, 15:52   #46
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

predefined,
Кстати, немного не понимаю ваше:
DELETE FROM `admin_bd_avtopick` WHERE `unix_time`='$timestamp' в посте #27

Вы наверное имели ввиду `unix_time`<'$timestamp'.

У меня сейчас вместо unix_time просто число- счетчик от программы 1 ( назвал n).
Я читаю данные поля str_click . Запоминаю в массиве все n, которые прочитал
И как правильно составить запрос удалить именно те записи с номерами n этого массива, а не все вподряд.
Если просто сделать в цикле удаление каждой записи отдельно то это некрасиво и неправильно.
Нужно одним запросом это сделать.

Можно, конечно, попробовать запомнить последнюю запись , его n и сделать так:
DELETE FROM `admin_bd_avtopick`.`HSCrab_test3` WHERE `n`<='$n'
Но правильнее было бы удалить все что прочитал, вдруг программа 1 будет перезапущена и там индексы заново начнутся с 0.
И программа 2 удалит все записи в том числе и те что не прочитала( если придет одновременно вставка еще от программы 1) ввиду меньшего индекса.

Сделал такое:
Код:
$sql = mysqli_query($link,"DELETE FROM `HSCrab_new`  WHERE login ='$login' and (`n` IN($n_del))");
$n_del - это строка такого вида: 1,2,3,4,5,6,10
Те индексы , которые были прочитаны программой 2 и именно их необходимо удалить

Вроде работает, но я не уверен в правильности работы.
Так правильно?

Последний раз редактировалось Illusiony; 28.08.2016 в 16:40.
Illusiony вне форума Ответить с цитированием
Старый 02.09.2016, 02:33   #47
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
predefined,
Кстати, немного не понимаю ваше:
DELETE FROM `admin_bd_avtopick` WHERE `unix_time`='$timestamp' в посте #27

Вы наверное имели ввиду `unix_time`<'$timestamp'.
Я предполагал поштучное удаление прочитанных записей, я же не знал логику работы ваших Приложений. Можно делать и `unix_time`<'$timestamp'.

Цитата:
Сообщение от Illusiony Посмотреть сообщение
Сделал такое:
Код:
$sql = mysqli_query($link,"DELETE FROM `HSCrab_new`  WHERE login ='$login' and (`n` IN($n_del))");
$n_del - это строка такого вида: 1,2,3,4,5,6,10
Вроде работает, но я не уверен в правильности работы.
Так правильно?
Абсолютно правильно. Я обычно сразу implode() с массивом вставляю в запрос:
PHP код:
"... AND `n` IN (".implode(','$arr).")" 
Только надо убедиться, что массив не пустой, ибо пустая конструкция IN () даст ошибку MySQL. И в $arr должны быть только цифры, тк строки придётся заключать в "" при подстановке.


PS: Надеюсь в запросе: WHERE login ='$login' переменная $login обработана от MySQL-инъекций? Все внешние данные, вставляемые в запрос, лучше экранировать через mysqli::real_escape_string.
Надёжнее всего использовать PDO вместо mysqli, но меня синтаксис PDO отталкивает своей ненаглядностью.

Последний раз редактировалось predefined; 02.09.2016 в 02:43.
predefined вне форума Ответить с цитированием
Старый 02.09.2016, 19:01   #48
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

predefined, На счет:
Код:
Только надо убедиться, что массив не пустой, ибо пустая конструкция IN () даст ошибку MySQL. И в $arr должны быть только цифры, тк строки придётся заключать в "" при подстановке.
Да, в принципе там у меня возможна и есть ошибка если нету данных нету в таблице в таком случае, но я для запроса удаления не сделал проверки выполнения и в итоге мой программа на delphi не получит сообщение о ошибке, попросту проигнорируется и это никак не повлияет на работу всей связки. Но, конечно можно сделать по уму и просто не делать запрос на удаление если данных нету.
На счет :
Код:
PS: Надеюсь в запросе: WHERE login ='$login' переменная $login обработана от MySQL-инъекций? Все внешние данные, вставляемые в запрос, лучше экранировать через mysqli::real_escape_string.
Да, конечно, я всегда так делаю над всеми принимаемыми данными в скриптах еще полтора года назад , когда только начал делать свой первый проект( который впрочем работает):
Код:
$login=mysqli_real_escape_string($link,$_POST['login']);
$passw=mysqli_real_escape_string($link,$_POST['passw']);
Этот форум мне очень многим помог и помогает. Еще раз хочу сказать огромное спасибо форуму и его участникам!
Illusiony вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, с помощью которой изображение будет разбиваться по пикселям и будет создаваться матрица andrey4515 Помощь студентам 2 08.01.2014 18:44
Будет ли сервер idTCP работать без веделенного внешнего ip (Delphi Indy) _PROGRAMM_ Помощь студентам 1 29.11.2010 13:52
какая структура *.icns?? Ntlegend Общие вопросы Delphi 3 02.09.2009 01:24
Учет оплаты. Какая формула будет если..? Anton_audit Microsoft Office Excel 5 12.08.2009 17:40
посчитать какая доставка для клинта 10-я? Delphi (Клиент-Сервер) Vindigo Помощь студентам 6 27.01.2008 15:28