
Petr
06.01.2018
10:28:19
@darthunix спасибо, гляну

Yaroslav
06.01.2018
10:30:09

Petr
06.01.2018
10:31:09
на самом деле, на текущий момент способы сделать незаметным для юзера найдены, однако вопрос каков из них наиболее нормальный)
сейчас договорились что данные будем лить раз в месяц пачкой в санитарный выходной день, когда юзеров нет
тут еще встает вопрос как сделать износ ресурсов (в том числе жестких дисков) наименьшим

Google

Petr
06.01.2018
10:33:30
я пока еще провожу тесты, если пачка 100кк вставится за сутки в таблицу с индексами — то задача "решена"

Yaroslav
06.01.2018
10:39:08

Petr
06.01.2018
10:39:10

Yaroslav
06.01.2018
10:41:34

Petr
06.01.2018
10:43:33
ну, учитывая тот факт, что выделили один день в месяц для "технических работ", то "незаметно для пользователя" эквивалентно управиться с задачей загрузки данных за сутки
при текущей конфигурации это задача должна решаться (правда пока тестирую)
ежели так — то проблемы нет;
вчера она решилась по большей части после обсуждения тут
но решать ведь можно по-разному и что-то лучше, что-то хуже

Yaroslav
06.01.2018
10:46:28

Petr
06.01.2018
10:47:39
Данные у юзера будут месячной актуальности (это норма в моей задаче)
Аккумулированная таблица ему на чтение доступна не будет

Yaroslav
06.01.2018
10:49:39

Petr
06.01.2018
10:49:45
И вставал вопрос: полностью пересчитать индексы (удалить индексы, вставить данные, построить индексы), или же сразу вставлять
решил пока что второе

Google

Petr
06.01.2018
10:51:34
btree insert же O(log(N))

Yaroslav
06.01.2018
10:54:06

Petr
06.01.2018
10:54:56
а, ну тогда разумеется :)
напугали вы
кстати, кто-то занимался расчетом time complexity для билда индекса btree с нуля, когда данные уже вставлены?

Yaroslav
06.01.2018
11:03:06

Petr
06.01.2018
11:04:24
я пытаюсь найти асимпт. подтверждение того что строить индекс после того как данные вставлены — быстрее, чем сразу пихать в таблицу с индексом (даже если изначально пуста)
точнее хочу прикинуть отношение time complexity между (удалить индексы, вставить данные, построить индексы) и (вставить данные в таблицу с индексом)
при условии, что в таблице изначально имеется 1ккк записей
time complexity второго случая понятен, вы его выше писали тоже
вставка данных в таблицу без индексов — тоже

Yaroslav
06.01.2018
11:12:59

Petr
06.01.2018
11:13:24
и каково между ними различие?
и верно ли утверждение, что во втором случае износ ресурсов серверных (жесткий диск и тд) будет ≈ меньше?

Yaroslav
06.01.2018
11:14:44

Petr
06.01.2018
11:15:51
ну да, я ставлю меинтененс ворк мем в 4ГБ
спасибо :)

Yaroslav
06.01.2018
11:20:16
ну да, я ставлю меинтененс ворк мем в 4ГБ
Это далеко не единственная настройка. https://www.postgresql.org/docs/current/static/populate.html читали?
Кроме того, вполне возможно, что у Вас PostgreSQL вообще настроен не оптимальных образом. ;)

Petr
06.01.2018
11:22:14

Google

Yaroslav
06.01.2018
11:24:07

Petr
06.01.2018
11:24:33
сейчас гляну

Аггей
06.01.2018
11:56:43
Не будет ли дешевле - на чтении - лёгкий index scan, а затем небольшой seq scan?

Xenos
06.01.2018
12:17:58
Господа, как мне получить количество дней, начиная с первой записи в таблице по сегодняший день 1 запросом?
Могу получить дату первой записи и постчитать от неё на ЯП основной логики программы, но может есть способ получить это одним запросом?

Vladislav
06.01.2018
12:22:06
Sysdate-min

dq
06.01.2018
13:00:14
Привет всем ,возникла такая пробелма в боте тедеграм.
Бот стоит на впс и в нем есть функция "Сделать рассылку на всех пользователей"
С сегодняшнего утра выдает такую ошибку в консоли "sqlite3.OperationalError: Could not decode to UTF-8 column 'channels' with text '?�'"
Кто поможет решить ,деньгой не обижу

Сергей
06.01.2018
13:05:39
мигрируй с скулайт на постгре
а так кто то записал в колонку не UTF8 символ
попробуй своим ЯП просканировать строки и вывести в лог ту запись на которой у тебя приложение падает
типа такого делай
last_id = 0
while True:
row = 'select * from blabla where id > last_id order by id limit 1'
last_id = row['id']
log.info(last_id)
когда получишь нужный id сделай запрос руками и таким образом получишь запись и сможешь ее поправить
ну и потом надо будет узнать как не UTF8 символ попал в базу

Артур
06.01.2018
15:09:59
а можно ли для каждого пользователя генерировать свою таблицу?
например сделать у пользователей инвентарь и это будет отдельная таблица для пользователя
или так не эффективно?

om
06.01.2018
15:11:12

Артур
06.01.2018
15:11:26
а как это потом связать?

Google

Артур
06.01.2018
15:11:31
у пользователя хранить название таблицы?

om
06.01.2018
15:11:45

Артур
06.01.2018
15:11:56
а как лучше сделать?
не делал серверных БД

om
06.01.2018
15:12:27
ээто внешний ключ называется
Две таблицы: user (Id serial, name text) и inventory (Id serial, userid int, name text, amount int)
И ты всегда сможешь посмотреть инвентарь игрока запросом select * from inventory where userid=123
не делал серверных БД
Нет различий между серверных или пользовательских бд. Есть нормализованные и не нормализованные.

Артур
06.01.2018
15:21:10
я в том смысле что не приходилось делать БД для многих пользователей, делал такие, где всего 1 пользователь

om
06.01.2018
15:23:42

Petr
06.01.2018
17:57:53
@netneladno если интересно, индексирование закончилось и заняло 20 часов 2 минуты :)
теперь попробую вставить пачку 40млн и сделать замер

Anton [Mgn, az09@osm]
06.01.2018
18:15:12
что значит таблица в центре?

Артур
06.01.2018
18:25:42
я ее уже удалил, она без надобности

Nikolay
06.01.2018
18:28:47
Товарищи, поделитесь лучшими практиками по партицированию (мне предстоит импортировать два вида данных в количестве 125 млн и 4 млн строк). Вообще сабж потянет столько?

Anton [Mgn, az09@osm]
06.01.2018
18:31:31

Petr
06.01.2018
18:34:33
а зачем там собственно партицирование? как делятся эти 125 млн?

Google

Nikolay
06.01.2018
18:39:49

Артур
06.01.2018
18:42:48
схему уже сильно переделал)
а как лучше хранить данные которые очень быстро пополняются и в большом количестве
например +100к записей в день

Darafei
06.01.2018
18:52:44
100k записей в день - это немного

Артур
06.01.2018
18:53:22
возможно, но за 10 дней там уже лям будет а по этим данным так же часто необходимо пробегаться и составлять анализ

Darafei
06.01.2018
18:53:23
паттерн чтения важнее
если ты никогда не читаешь данные, ты можешь их, например, не хранить

Артур
06.01.2018
18:54:10
их необходимо читать

Darafei
06.01.2018
18:54:47
как именно читать? по ключу, по интервалу, top-n, knn, ещё как-то? :)

Артур
06.01.2018
18:56:13
есть некое-кол воз записей принадлежашие юзеру, в этих записях хранятся данные статистики пользователя, вот эти данные необходимо прочитать, сделать анализ и обновить на основе анализа данные пользователя, либо вывести гистограмму по этим данным на сайте
id юзера - 30 символьный токен

Darafei
06.01.2018
18:58:31
если индекс по этому id есть, все будет нормально

Anton [Mgn, az09@osm]
06.01.2018
19:01:48

Аггей
06.01.2018
19:33:46

Nikolay
06.01.2018
19:34:59

Аггей
06.01.2018
19:36:16
Ну логи хранить можно много где... можно больше подробностей о логах... о их структурированности?
Просто хранение логов в pg - если это логи, а не аудит - у меня особый пунктик - много геммороя - большие объемы. При том, что 99% логов не будут прочитаны никогда