|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.08.2016, 20:53 | #1 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Какая структура будет меньше загружать сервер?
Сейчас работает так:
- есть 2 програмки и сервер - первая программа посылает на сервер при каждом клике по окну пост запросом координаты х и y - на сервере эти данные записываются insert Mysql memory в два поля SMALLINT + autoincrement - вторая програмка с частотой около 1 раз в секунду читает эту таблиц и после этого очищает ее полностью TRUNCATE TABLE Так как от первой программы могут приходить частые запросы, порой более 1го в секунду, хочу сделать отправку данных 1 раз в секунду, если конечно данные будут. Я хочу отсылать данные в виде строки, например такой: [101]{100}[102]{200}[103]{0}[100]{100}[100]{100} и в таблице будет только 1 поле varchar(120) Тогда алгоритм может быть такой: - первая программа с частотой до 1 раза в секунду отправляет строку на сервер такого вида: [101]{100}[102]{200} - на сервере читаем табличку select - добаляем к уже имеющимся данным( если они есть) эту сторочку и делаем update ( добавилось update вместо insert) - вторая программа читает эту строчку и делает TRUNCATE TABLE Таких таблиц и программ может быть множество десятки, а может быть и 1-2 сотни Вопрос в том как организовать эту структуру, чтобы нагрузка на сервер была меньшей из всех вариантов. |
07.08.2016, 22:26 | #2 |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
сделай то не знаю что
|
08.08.2016, 00:15 | #3 |
Форумчанин
Регистрация: 01.08.2016
Сообщений: 182
|
Программа 1 и программа 2 обмениваются данными через таблицу MySQL на сервере?
Если таких программ и таблиц могут быть сотни - как они узнают где чья таблица/данные? Возможно, проще писать всё в одну таблицу и добавить туда поле id_programm чтобы идентифицировать программы. И не забывайте, что MySQL на таблицах типа MyISAM не даст одновременно читать и писать - он блокирует таблицу на время чтения/записи. То есть, тут могут быть тормоза, если неправильно организовать структуру. |
08.08.2016, 06:27 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
А зачем вообще SQL здесь? По сути - одна прога пишет в конец очереди, другая забирает из начала
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
08.08.2016, 18:21 | #5 | |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Цитата:
Да удобнее для человека чтобы эти таблицы были все в одной, но если использовать myisam или memory для большого списка таких работающих программ- много строк будет полная блокировка таблицы. Если использовать innodb, то потеряю в скорости обращения диск- память. Таблицы будут называться уникально для каждой связки программ. Аватар, да вы правы. Но мне так удобнее чем что то придумывать на файлах и тому подобное. К тому же это лишь первые варианты структуры, могут быть координальные изменения и усложнения в дальнейшем. И кроме, того что я описал, будут еще некоторое количество проверок через Mysql других данных ( это я к вопросу о SQL, просто Mysql так и так уже задействована). come-on, в большинстве согласен, описываю я плохо то что хочу услышать( Последний раз редактировалось Illusiony; 08.08.2016 в 18:23. |
|
09.08.2016, 13:01 | #6 | |
Форумчанин
Регистрация: 01.08.2016
Сообщений: 182
|
Цитата:
Вот хабровский пример Highload работы с MySQL на PHP, похоже, как раз то, что надо. И с исходником. Если нагрузка от запросов ваших приложений будет, всё-таки, большой, придётся смотреть в сторону многопроцессовых демонов на PHP. Последний раз редактировалось predefined; 09.08.2016 в 13:03. |
|
09.08.2016, 22:13 | #7 | |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Цитата:
Ну тут Highload работы с MySQL на PHP описано как использовать мемори таблицы. Я не понял ваших выводов. Вопрос заключается как именно организовать структуру memory таблицы и способов работы с нею для моего случая для минимизации серверной нагрузки. Последний раз редактировалось Illusiony; 09.08.2016 в 22:18. |
|
10.08.2016, 13:39 | #8 | |||
Форумчанин
Регистрация: 01.08.2016
Сообщений: 182
|
Цитата:
Цитата:
Имхо, главная проблема у вас будет не со скоростью, а с thread safe. Если данные от программ вы принимаете не демоном, а скриптом(например, PHP), то на каждый запрос запускается отдельная копия скрипта. Она работает по квотам времени, поэтому периодически прерывается, чтобы дать время другим скриптам. То есть, скрипт может успеть сделать SELECT и приостановиться, а вторая копия скрипта в это время - допишет данные в эту же запись. Скорее всего вам придётся работать с атомарными(непрерывающимися) операциями. То есть, так делать неправильно: Цитата:
INSERT INTO `table` SET fld=fld+'что_прислано' или использовать хитрые конструкции типа 'ON DUPLICATE KEY' |
|||
10.08.2016, 21:38 | #9 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
predefined, Вы имеете ввиду, что возможно ситуация между 2мя отдельными запросами к mysql в скрипте может произойти дрой запрос из другого скрипта и тем самым испортить логику? Если так, то да я об этом подумывал. Думал может тогда сделать принудительный лок таблицы пока скрипт не выполнит оба запроса.( правда никогда такого не делал).
На счет все в одном запросе, я весьма мало знаком с Mysql. 1) Возможно одним запросом прочесть данные, добавить к ним еще данных и перезаписать? 2) Возможно одним запросом прочесть (и записать эти данные в переменную php) и после этого сделать TRUNCATE TABLE или Update? Последний раз редактировалось Illusiony; 10.08.2016 в 23:19. |
13.08.2016, 15:18 | #10 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Немножко пояснений:
- предполагается порядка 100-200 таблиц - в каждой таблице всего по 1 записи - одновременно может работать связок первая программа-> таблица mysql( одна запись)<- вторая программ до примерно 100 штук - частота запросов от программы №1 до 1 запроса в 1-2 секунды. От второй программы аналогично. Последний раз редактировалось Illusiony; 13.08.2016 в 16:32. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Написать программу, с помощью которой изображение будет разбиваться по пикселям и будет создаваться матрица | 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 |