[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сохранить соединение с БД
Страницы: 1, 2, 3, 4
N0ob
В нагрузках на БД я полный нуб. И по этому решил спросить вот такой вопрос. Есть онлайн чат написанный на аяксе. Выборка сообщений идет каждую секунду. И каждую секунду в обработчике идет соединение с БД, что бы выбрать сообщения. Вопрос: можно ли как-то это соединение сохранять куда-либо, что бы при каждом запросе к обработчику заново не соединятся с БД а просто воспользоваться сохраненным соединением?
Игорь_Vasinsky
Цитата
Выборка сообщений идет каждую секунду

а чё до 5 сек то не увеличить? супер оперативно инфа должна поступать? biggrin.gif biggrin.gif

уже в 5 раз нагрузки считай снизил.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sergeiss
Цитата (N0ob @ 12.02.2015 - 17:53)
И каждую секунду в обработчике идет соединение с БД, что бы выбрать сообщения.

Это разные скрипты обращаются или внутри одного и того же скрипта так?

Вообще, для чата лучше бы создать "демона", т.е. прогу, которая будет активной постоянно. Все скрипты должны обращаться к этому демону. И уже он всё разруливает, в т.ч. только он обращается к БД.
Активные сообщения можно держать в этом демоне. Тогда он не будет их вообще запрашивать из БД; только, может быть при запуске. А будет он держать сообщения внутри себя и отдавать новые, по запросу скриптов. Также, новые сообщения именно демон будет писать в БД.

При написании такого демона тебе могут помочь кое-какие специальные функции http://php.net/manual/ru/book.sem.php (Я не пользовался этой хреновиной в ПХП, только в Си++)

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
stump
Вроде как функции коннекта к БД постоянно пользуются одним и тем же каналом. Например mysqli_connect сначала проверяет есть ли соединение и если есть присоединяется, если нет создает его. Вроде то, что надо?

_____________
Трус не играет в хокей
Hello
stump, решение подходит для ситуации, когда у тебя 10 запросов в секунду. В рамках одного соединения запросы идут последовательно.

_____________
VPS от 5$, первые 2 месяца - бесплатно.
N0ob
Игорь_Vasinsky я думаю будет неудобно, когда отосланное сообщение будет приходить получателю через 5 секунд, после его отправки wink.gif
sergeiss я так понял, вы говорите про технологию Sockets? Просто я с ней не знаком, а про Sockets мне выдало в гугле, когда про демонов гуглил
stump ,Hello получается я каждую секунду обращаюсь аякс запросом к файлу, и при каждом обращении заного устанавливается соединение с БД. Я просто думаю, что это тоже нагружает БД(могу ошибаться, т.к. сказал, что в нагрузках на сервера я ничего не знаю). Думал, что соединение можно хранить в каком либо "хранилище", что бы оно было активно(соединение) пока юзер онлайн. Как то так smile.gif
sergeiss
Цитата (N0ob @ 13.02.2015 - 19:21)
я так понял, вы говорите про технологию Sockets?

Не обязательно сокеты. Самое главное, что на сервере должен быть запущен демон, который постоянно держит открытое соединение с БД, а заодно и все свежие сообщения, чтобы их не выдергивать из БД.
А уж как ты обращаешься к демону, это другой вопрос. Тут могут быть и сокеты, и аяксовые запросы.
И даже "старомодный" айфрейм можно задействовать вместо аякса. С помощью которого можно долго получать данные для чата, без дополнительных запросов. Единственный недостаток использования айфрейма, причем заметный пользователю, это то, что браузер показывает индикацию загрузки страницы.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
N0ob
С демонами никогда не работал. ЩАс гуглил про них. Пока смутно что понял. А еще и ЛС писать на нем mad.gif
N0ob
sergeiss то есть получается у меня будет работать демон, который будет через определенное время в цикле выбирать все новые сообщение и помещать их в массив. А потом просто аякс запросом из этого массива выбирать нужные сообщения. Так?
sergeiss
Не так.
"Демон" - это программа, постоянно запущенная, висящая в оперативке. В Винде такие называют "службами". У этой программы есть некоторые данные тут же в оперативке, а за всеми остальными она может обращаться на диск. Да вот тот же MySQL - это тоже "демон" smile.gif
В твоем случае этот демон не должен никуда обращаться без особой необходимости. Наоборот, все скрипты, работающие с чатом, обращаются к нему. Демон тут же хранит, в оперативке, все свежие сообщения. И выдает их по запросу, согласно указанным тобой критериям.
Ну вот представь... Сидит бабулька у подъезда. Целый день. Ей скучно. И она по-любому там сидит. Поэтому ее можно использовать для оперативного обмена инфой smile.gif
"Марьиванна, Петька мне ничего не передавал?" - "Да, просил сказать, чтобы подождал его, он скоро вернется". - "Ой, а мне некогда ждать, передайте ему эту тетрадку, пожалуйста!"
"Марьиванна, а Валька из 2-го подъезда уже ушла гулять с ребенком?" - "Ушла и просила передать, чтобы вы ее догоняли, она будет на детской площадке".
Ну и так далее. В этом случае "Марьиванна" выступает в роли демона, службы. Хранит оперативную инфу и выдает ее по требованию и в нужном количестве. Она хранит её в своей БД, т.е. в голове. Вместе с "паролями доступа" людей к определенным данным.
Если же придет, допустим, участковый "полиционер" smile.gif, то она ему сможет рассказать всё обо всех - у него потому что "пароль суперпользователя" wink.gif

Твой демон - это та же "Марьиванна". Постоянно в работе, обрабатывает входящие запросы, выдает нужную инфу. Ну, и твой сервер может эту инфу сам, автоматически, загружать в БД (то же самое, что Марьиванна будет инфу записывать на бумажку, для длительного хранения).

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
N0ob
sergeiss ну допустим хранит демон сообщения. А если через годок-другой этих сообщений будет миллиарды? То тогда вся оперативная память псю под хвост. Как мне демона с БД подружить?
sergeiss
Цитата (N0ob @ 18.02.2015 - 16:29)
ну допустим хранит демон сообщения. А если через годок-другой этих сообщений будет миллиарды?

Ты не понял. Демон хранит только свежие сообщения. А вся история, естественно, в БД хранится. Из БД можно подгрузить только, может быть, сколько-то сообщений при запуске демона. А в остальное время они будут только писаться в БД, демон будет сохранять их туда.

Цитата (N0ob @ 18.02.2015 - 16:29)
Как мне демона с БД подружить?

Демон - это точно такой же скрипт, как и любой другой. Поэтому и "подружи" его с БД также, как любой другой скрипт ПХП.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
N0ob
То есть сделать так. Когда юзер отсылает сообщение, аяксом передать его демону, он его сохраняет и так же записывает в БД. И когда нужно показать новые сообщение, то выдергиваю их из демона. Что то типо этого?
sergeiss
Да, именно так. Это будет работать очень быстро, потому что демон в оперативке сидит вместе с самыми свежими данными.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
inpost
N0ob
node.js + socket.io , там есть пример чата.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.