
vlade11115
23.10.2018
20:12:19
А два клиента как узнают что у соседа брони стало меньше? Ходят в то поле и байтики уже на своей стороне десериализовывают?

pew
23.10.2018
20:13:24

vlade11115
23.10.2018
20:14:42
то что знает клиент с базой никак не связано
На этом этапе я нить потерял, пойду спать.

pew
23.10.2018
20:14:56
ну при чем тут база и клиент

Google

pew
23.10.2018
20:15:15
сервер говорит клиенту что происходит, он держит это в памяти у себя

vlade11115
23.10.2018
20:15:26
Как причём?? А оттуда данные брать?

pew
23.10.2018
20:15:28
что напишешь что бы он передавал а клиент принимал и отрисовывал, то и будет
понял?

vlade11115
23.10.2018
20:20:59
Нет, ну да ладно.


pew
23.10.2018
20:26:53
ну у тебя запускается клиент → отправляет упрощенно скажем логин и пароль → сервер берет сверяется с базой проверяет, если есть и сходится все то берет из базы инфу о том какие у тебя персы есть и отправляет на клиент инфу → у тебя клиент принимает это и отрисовывает какие есть персы, ты выбираешь и жмешь вход → сервр принимает твой инпут и входит выбраным персом, по нему загружаются из базы все данные, он инициализирован и затем сервер отправяет его в игровые циклы(если не распределенная система, а я еще не разносил по сервисам и серверам) либо на игровой сервер и отправляет о его состоянии клиенту инфу → клиент у себя отрисовывает что отправил серв → игрок нажимает ан кнопки инпут отправляется на серв → серв проверят можно ли так и выполняет действия, иногда зействия требуют обновления состояния в базе по каким-то сущностям, иногда сам пробегается и по другим сущностям обновляет в базе то что не обновил раньше, в итоге данные в базе совпадают с тем что на серве и актуальны всегда
ты же не шлешь с фронтенда в базу запросы, все через бекенд, так и тут
короче чет я времени на разъяснения всякие много потратил, теперь точно пошел


Darafei
23.10.2018
20:30:17
сервер не умеет кластеризоваться?

pew
23.10.2018
20:31:03
сервер не умеет кластеризоваться?
сейчас нет, но архитектура впринципе позволяет это сделать, там по потокам сейчас разнесено, и фактически некоторые взаимодействия реально на TCP вынести
боевку можно на сервак вынести, мир, и слать колбэки на основной для записи в базу
все блин))) я пошел

Denis
23.10.2018
21:00:17

Google

Sab0
23.10.2018
21:09:42
запускал через python wheel
решил проблему, если что)

Terminator
23.10.2018
22:14:32
@exfive будет жить. Поприветствуем!

Rustam
23.10.2018
22:14:43
фух чуть не умер

pew
23.10.2018
22:30:09

Terminator
24.10.2018
02:13:11
@gazalkentec будет жить. Поприветствуем!
Сергей Скрипник будет жить. Поприветствуем!
@ismglv будет жить. Поприветствуем!
Konstantin Makarov будет жить. Поприветствуем!

SistemK
24.10.2018
08:03:13
Привет всем. Столкнулся с проблемой что постгрес нагружает диск на 100%. Версия постгрес 9.4.2, которая для 1с. На ней собственно база 1ски. ОС Винда 2012. Диск ХДД. Подскажите пож. куда копать.

Алексей
24.10.2018
08:09:19
Тут много причин может быть, и не обязательно с постгрей связанных. Я бы начал разбираться с того, что повыполнял бы запросы, которые 1С делает

Yaroslav
24.10.2018
08:20:06

SistemK
24.10.2018
08:20:38
так у меня 9.4.2
да, с сайта 1ски скаченная

Yaroslav
24.10.2018
08:34:20

SistemK
24.10.2018
08:34:29
эм, я не смотрел ещё

0x58
24.10.2018
10:34:58
Парни, всем привет! Подскажите плиз как в PG можно сделать уникальность по столбцу в 3-х таблицах?
То есть дано 3 таблицы и в каждой из них есть поле с неким числом (code), как сделать уникальность на это поле по трем таблицам сразу? думал на счет constraint но чето хз можно ли там в другие таблицы заглядывать.
Т.е при вставке в любую нужно чекать другие две.
P.S Понимаю, что костыльно и уместно было бы использовать uid, но надо вот так :/

Sergey
24.10.2018
10:35:14
вроде уже даже 10 для 1c есть....

Onegai
24.10.2018
10:42:06

Google

Sergey
24.10.2018
10:43:35
У меня 10 стоит, 1С
Я его сам собирал, когда десятка вышла... Потестил, правда в бой так и не рискнул.

Yaroslav
24.10.2018
10:44:35

0x58
24.10.2018
10:45:31

Sergey
24.10.2018
10:45:42

Yaroslav
24.10.2018
10:46:44


Nikolai
24.10.2018
10:47:20
Вопрос: кто-нибудь знает какой-нибудь хороший способ ускорять COUNT?
Пример запроса с планом (users ~1.5M строк):
explain analyze SELECT COUNT(*) AS count FROM "public"."users" WHERE "public"."users"."group_id" = 3 AND "public"."users"."accreditation" = 2 AND "public"."users"."ban_flags" = 0;
QUERY PLAN
—---------------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=15050.91..15050.92 rows=1 width=8) (actual time=613.643..613.644 rows=1 loops=1)
-> Index Scan using gid_accr_ban on users (cost=0.43..14983.84 rows=26829 width=0) (actual time=0.064..475.212 rows=166949 loops=1)
Index Cond: ((group_id = 3) AND (accreditation = 2))
Filter: (ban_flags = 0)
Rows Removed by Filter: 11982
Planning time: 0.392 ms
Execution time: 613.727 ms
(7 rows)

Darafei
24.10.2018
10:48:36


Nikolai
24.10.2018
10:49:36
точно
куда я только смотрел
есть ban_flags и есть ban =\
спасибо!

0x58
24.10.2018
10:50:19


Nikolai
24.10.2018
10:52:12
добавить в индекс ban_flags? или индекс с where ban_flags=0
взял по существующему индексу с примерно подходящей мощностью
Всё равно 200-300мс на запрос:
—-------------------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=1640.94..1640.95 rows=1 width=8) (actual time=323.630..323.630 rows=1 loops=1)
-> Index Only Scan using gid_accr_ban on users (cost=0.43..1573.85 rows=26833 width=0) (actual time=0.059..200.830 rows=166978 loops=1)
Index Cond: ((group_id = 3) AND (accreditation = 2) AND (ban = 0))
Heap Fetches: 24855
Planning time: 0.318 ms
Execution time: 323.698 ms

Darafei
24.10.2018
10:53:53


Yaroslav
24.10.2018
10:54:19
Ок, uuid не причем. Приходят данные от внешней системы из разных источников api, добавленные руками и т.д, в зависимости от типа пишутся в одну из 3х таблиц, все они приходят с определенным кодом, так вот нужно уметь понять что этого кода еще нет ни в одной из таблиц при вставке.
Думаю подойдет просто view с кодами.
Понятно. Дело в том, что в такой модели типов лучше иметь общую родительскую таблицу (и Вы уже увидели, почему).
Т.е. что-то вроде:
CREATE TABLE common_type(id serial PRIMARY KEY, <common fields>);
CREATE TABLE type_one(id int PRIMARY KEY REFERENCES common_type, <type one fields>);
CREATE TABLE type_two(id int PRIMARY KEY REFERENCES common_type, <type two fields>);
Вставка становится немного сложнее, естественно. Т.е. нужно вставлять сначала в common_type, потом в type_x.


0x58
24.10.2018
10:56:05
Понятно. Дело в том, что в такой модели типов лучше иметь общую родительскую таблицу (и Вы уже увидели, почему).
Т.е. что-то вроде:
CREATE TABLE common_type(id serial PRIMARY KEY, <common fields>);
CREATE TABLE type_one(id int PRIMARY KEY REFERENCES common_type, <type one fields>);
CREATE TABLE type_two(id int PRIMARY KEY REFERENCES common_type, <type two fields>);
Вставка становится немного сложнее, естественно. Т.е. нужно вставлять сначала в common_type, потом в type_x.
Спасибо, согласен, так было бы удобней, но сейчас нет возможности переделать, приходится работать с тем что есть.

Darafei
24.10.2018
10:56:35


Nikolai
24.10.2018
10:56:53
Aggregate (cost=1076.96..1076.97 rows=1 width=8) (actual time=328.507..328.508 rows=1 loops=1)
-> Index Only Scan using gid_accr_ban on users (cost=0.43..1002.87 rows=29636 width=0) (actual time=0.174..192.684 rows=166978 loops=1)
Index Cond: ((group_id = 3) AND (accreditation = 2) AND (ban = 0))
Heap Fetches: 1554
Planning time: 0.615 ms
Execution time: 328.588 ms
лучше, да, но всё равно долго

Darafei
24.10.2018
10:59:02
надо 0

Google

Nikolai
24.10.2018
10:59:32
уже 2028

Yaroslav
24.10.2018
10:59:54

Darafei
24.10.2018
11:00:13
уже 2028
а сколько юзеров в секунду обновляются в таблице?

Nikolai
24.10.2018
11:00:59

Darafei
24.10.2018
11:01:47
десятки
а shared_buffers таблицу в себя вмещает?

0x58
24.10.2018
11:03:11
А почему бы и не переделать? Т.е. добавить общую таблицу, в которой одно это поле + PRIMARY KEY + триггеры на вставку в прочие три?
Другой вариант — повесить AFTER TRIGGERS, которые будут проверять. Но, если Вы используете default isolation level, Вам придётся (наверное) немало подолбаться, чтобы они работали надёжно.
Да, вариант с дополнтельной таблицей вполне подходящий, дело в том, что было ок до недавних пор, пока данные из внешних источников не начали задваиваться, сейчас помимо огрничений на уровне бизнес-логики хотелось бы добавить ограничения на бд. А вариант с view примерно же тоже самое? т.е данных не так чтобы много и запрос к view наверно не сильно будет критичен в плане скорости.

Yaroslav
24.10.2018
11:03:51

Nikolai
24.10.2018
11:03:51

0x58
24.10.2018
11:04:18

Yaroslav
24.10.2018
11:06:15

0x58
24.10.2018
11:07:51

Yaroslav
24.10.2018
11:23:53

Nikolai
24.10.2018
11:24:40

Yaroslav
24.10.2018
11:26:53

Nikolai
24.10.2018
11:27:03
Ну то есть понятно, что данных много и в-целом оно считать будет долго
Вопрос о существующих практиках оптимизации COUNT в-целом
Первый - очевидно, не использовать COUNT
Второй - предварительный подсчет через триггеры или на уровне приложения
но может есть ещё что-то хорошее? )

Terminator
24.10.2018
11:29:05
@damncoolguy будет жить. Поприветствуем!

Google

Vladislav
24.10.2018
11:30:17
здрасьте,подскажите как переименовать БД если к ней есть коннект

Yaroslav
24.10.2018
11:31:04
но может есть ещё что-то хорошее? )
А вот чисто ради интереса, можете попробовать:
CREATE INDEX /* CONCURRENTLY */ ON "users"(id) WHERE group_id = 3 AND accreditation = 2 AND ban_flags = 0;
Потому что лучше уже вряд ли будет...