|
|
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
GorloPavelРебята. Нет никакой проблемы с id-шниками и т.д у меня. Сейчас все работает как надо. Всем огромнейшее СПАСИБО! Вопрос в следующем... К примеру у меня 2000 подключений. И вдруг они разом отключаются, мне нужно зарегистрировать это в БД. Сейчас при таком раскладе у меня сразу будет 2000 подключений к БД(та самая функция removeSession которую мы тут обсуждали). Я же хочу чтобы на это дело потоки вставали в очередь... Просто реально нет времени объяснять как устроена и что у меня тут за система. Можете посмотреть по моим темам. Еще раз спасибо!Хотите - не хотите, но объяснить, зачем вы хотите ставить потоки в очередь, вам придется :-) Окей, 2000 соединений оборвалось. Первым делом замечу, что с таким количеством клиентов, да если еще и каждому выделено по потоку, вашему приложению уже будет достаточно плоховасто. При таком количестве потоков здесь с большой вероятностью напрашивается NIO-сервер, который бы разруливал все IO и работу с СУБД в ограниченном небольшом количестве потоков. Как бы то ни было, пуксай у вас стандартные блокирующие сокеты, и по потоку на соединение. Вдруг две тысячи соединений сдохли. Они все начинают разом ломиться в базу. Но если у вас по уму сделана работа с базой, то есть пул соединений, с которым вы работаете через DataSource, то ничего страшного в этом нет - у вас в каждый момент времени будет работать не более N потоков, где N - количество соединений в пуле. То есть это уже и есть некий аналог очереди. С другой стороны, если у вас нет никаких проблем с блокировками в СУБД, и по факту закрытия соединения вам надо обновить одну строку в СУБД, и больше никогда ее не трогать, то в целях оптимизации можно задуматься о вынесении логики по "закрытию" сессии в СУБД в отдельный поток, который будет фигачить эти обновления батчами. То есть вам надо застартавать поток, который в бесконечном цикле будет смотреть на какую-нибудь коллекцию. А в этой коллекцию вы складываете все айдишники закрытых коннекторв. А поток либо по таймауту, либо по факту превышения коллекцией определенного размера, забирает эти айдишники из коллекции, и далее либо формирует 1 (один) запрос в СУБД, либо же формирует по одному запросу на каждый ID, как это у вас сделано сейчас, но делает bulk update. Резюмируя: 1) Если вы паритесь о производительности, то вам надо в первую очередь смотреть в сторону NIO, ибо 2000 потоков от 2000 клиентов могут вообще не выжить у вас. Одновременная запись в базу из этих 2000 потоков является намного меньшим злом, чем сам факт наличия этих потоков в таком огромном количестве. 2) Если все равно хочется заоптимизировать закрытия сессии, то попробуйте сделать так, как я описал выше. Одна коллекция. Один поток в бесконечном цикле, который периодически смотрит на эту коллекцию, и применяет накопленные изменения либо через один большой SQL, либо через множество маленьких SQLей, но в bulk режиме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 17:16 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovPetro123GorloPavel, каждый поток пусть сам пишет в БД. Так же как это делает банальный JSP при модели сервлет-поток. События конца юзер-сессии не так чАсты, чтобы беспокоиться.Повбывавбы. Нет, достаточно количество ядер, конечно и сотни одновременных обновлений одной таблицы разрулят, но за подход - повбывавбы именно СУБД заточена на МНОГОпользовательскую ПАРАЛЛьельную работу. Лишь бы соблюдалось - поток = коннект(соединение). Так что при чём тут ядра? Для уменьшения Одновременных соединений (< 3000) есть пул. Если ты сервер, не суетись под клиентом ))) (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 17:24 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
cdtyjv1) Если вы паритесь о производительности, то вам надо в первую очередь смотреть в сторону NIO, ибо 2000 потоков от 2000 клиентов могут вообще не выжить у вас. Одновременная запись в базу из этих 2000 потоков является намного меньшим злом , чем сам факт наличия этих потоков в таком огромном количествеВыделено мною. На менее топовом железе пробовали работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 17:25 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
может посмотреть в сторону netty ? Зачем Вам собственный цик с гвоздями ??? возьмите готовый : http://habrahabr.ru/post/136765/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 23:26 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
Atum1может посмотреть в сторону netty ? Зачем Вам собственный цик с гвоздями ??? возьмите готовый : http://habrahabr.ru/post/136765/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 23:37 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
Atum1может посмотреть в сторону netty ? Зачем Вам собственный цик с гвоздями ??? возьмите готовый : http://habrahabr.ru/post/136765/ Было: 15391945 И мне больше вот эта статья нравится http://habrahabr.ru/post/136456/ ...Уже почти год мы пишем свою реализацию сервера, рассчитанную на больше чем 40 человек... В руки совершенно случайно попала библиотека Netty ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 23:40 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
Blazkowicz http://habrahabr.ru/post/136765/ Было: 15391945 И мне больше вот эта статья нравится http://habrahabr.ru/post/136456/ ...Уже почти год мы пишем свою реализацию сервера, рассчитанную на больше чем 40 человек... В руки совершенно случайно попала библиотека Netty Эту тоже хотел предложить :) -но потом - чисто Фон Нейманский метод : прочитайте мою статью №1- потом №2 :) по поводу Было: 15391945 - так не бывает - нужно взять и переписать ,уверен времени займет меньше чем свой велосипед - особенно такого качества :(( и в нем искать ошибку .. а то получается выстрел в ногу как тут http://habrahabr.ru/post/143074/ и зачем? идти по такому пути? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 23:50 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
Nio мне точно не подходит. По поводу 2000 потоков.... ерунда у меня их в пике нагрузки под 15к и все работает стабильно и быстро. И все это работает на ОЧЕНЬ скромном железе. В принципе вариант с отдельным потоком для удаления из БД мне подходит. Пул соединений тоже бы подошел, но я так и не нашел пример его реализации :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 03:13 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
GorloPavelNio мне точно не подходит. По поводу 2000 потоков.... ерунда у меня их в пике нагрузки под 15к и все работает стабильно и быстро. И все это работает на ОЧЕНЬ скромном железе. В принципе вариант с отдельным потоком для удаления из БД мне подходит. Пул соединений тоже бы подошел, но я так и не нашел пример его реализации :( Как вариант - рассмотрите ( хотя бы для тестов ) jetty 9 - хороший сервер - на котором описать ваше решение - не более 50 -100 строк кода . http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty Код: java 1. 2. 3. Возьмите простой сервлет и к нему реализуйте простой WebListener - скорее всего вам будет достаточно использовать методы sessionCreated и sessionDestroyed Если я правильно понял вашу задачу. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. по поводу пула - посмотрите хотя бы c3p0 http://www.mchange.com/projects/c3p0/ http://www.mkyong.com/hibernate/how-to-configure-the-c3p0-connection-pool-in-hibernate/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 09:46 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
Atum1, Откуда там взяться сервлетам, если к автора нет HTTP? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 10:06 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
cdtyjvAtum1, Откуда там взяться сервлетам, если к автора нет HTTP? TCP протокол ? protobuf ? https://code.google.com/p/protobuf/ все равно можно смотреть в сторону веб-сокетов и jetty http://www.jansipke.nl/websocket-tutorial-with-java-server-jetty-and-javascript-client/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 10:43 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
Atum1 , А protobuf здесь причем? :-) Ни HTTP, ни protobuf автору никак не поможет. В его ситуации это просто ненужные навороты сверху, которые не решать ни одной из его проблем. А какие-то вещи могут даже усугубить. Например, если у него сервер работает не по принципу request-response, а сам что-то шлет клиентам без запроса с их стороны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 11:04 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
GorloPavelПул соединений тоже бы подошел, но я так и не нашел пример его реализации :( не может быть). Где искал? Тормозит ли бд при записи Поток - Соединение - Запись проверил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 11:41 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
cdtyjv Atum1 , А protobuf здесь причем? :-) Ни HTTP, ни protobuf автору никак не поможет. В его ситуации это просто ненужные навороты сверху, которые не решать ни одной из его проблем. А какие-то вещи могут даже усугубить. Например, если у него сервер работает не по принципу request-response, а сам что-то шлет клиентам без запроса с их стороны. Какая то мифическая разработка - которая работает на нагрузке 15k? да еще и сама что то рассылает ? авторерунда у меня их в пике нагрузки под 15к и все работает стабильно и быстро. И все это работает на ОЧЕНЬ скромном железе сложно помочь когда не знаешь архитектуры ,что делает приложение и как оно должно работать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 11:45 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
Atum1Какая то мифическая разработка - которая работает на нагрузке 15k? да еще и сама что то рассылает ? Нет. Сервис аналог TeamViewer. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 13:46 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
GorloPavelAtum1Какая то мифическая разработка - которая работает на нагрузке 15k? да еще и сама что то рассылает ? Нет. Сервис аналог TeamViewer. субд какая, шифровальщик ты наш? ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 14:36 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
Petro123GorloPavelпропущено... Нет. Сервис аналог TeamViewer. субд какая, шифровальщик ты наш? ))) MySQL. имеется в виду не 15к соединений к MySQL, а клиентских потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 15:52 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
GorloPavelMySQL. имеется в виду не 15к соединений к MySQL, а клиентских потоков. разумеется). Зачем нам технические потоки. У тебя проблема - иметь актуальную табличку в СУБД с актуальными реальными клиентами. Напрашивается вывод - если приравнять сессию клиента к сессии СУБД, то сам коннект в БД и будет этой табличкой. В оракле всегда можно посмотреть количество активный соединений (сессий). При масштабировании и выходе твоего приложения на уровень гугла - вставляем пул для СУБД. Подходит? Не вижу проблемы для 5-ой страницы топика. Переписывать свою ИС ты всё равно будешь)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 16:08 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
GorloPavelПросто реально нет времени объяснять как устроена и что у меня тут за система. Можете посмотреть по моим темам. Ну чтож, спасибо, что хоть без регистрации и смс! Но все равно мы смотреть не будем. Просто реально нет времени обьяснять где там у вас ошибки, можете посмотреть по гуглу типичные ошибки. ps. Судя по 5 станицам воды, у вас очень много времени ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 17:03 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
chabapokGorloPavelПросто реально нет времени объяснять как устроена и что у меня тут за система. Можете посмотреть по моим темам. Ну чтож, спасибо, что хоть без регистрации и смс! Но все равно мы смотреть не будем. Просто реально нет времени обьяснять где там у вас ошибки, можете посмотреть по гуглу типичные ошибки. ps. Судя по 5 станицам воды, у вас очень много времени Ну это хотябы увлекательно нам дают кусочек кода а мы должны угадать где ошибка в огромной системе. ) Хоть какое то разнообразие . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 22:34 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
Ребята. Я уже писал ранее что проблемы больше нет. Ошибка найдена и исправлена. Я уже другой вопрос задал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 02:49 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
GorloPavelРебята. Я уже писал ранее что проблемы больше нет. Ошибка найдена и исправлена. Я уже другой вопрос задал :) Сладко поете:) Я конечно желаю чтобы у вас действительно все было тип-топ, но вероятность того что у вас все работает гаратированно правильно чуть больше нуля(без обид) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 02:57 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
GorloPavelРебята. Я уже писал ранее что проблемы больше нет. Ошибка найдена и исправлена. Я уже другой вопрос задал :)Для других вопросов создаются отдельные темы... это правило хорошего тона... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 07:31 |
|
||
|
Проблема с ConcurrentHashMap
|
|||
|---|---|---|---|
|
#18+
Alex KuznetsovGorloPavelРебята. Я уже писал ранее что проблемы больше нет. Ошибка найдена и исправлена. Я уже другой вопрос задал :)Для других вопросов создаются отдельные темы... это правило хорошего тона... Просто он в том же контексте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 10:02 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38526747&tid=2127814]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
188ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 558ms |

| 0 / 0 |
