172 похожих чатов

Друзья есть вотткакая таблица с данными create table

ping
(
id serial primary key,
created timestamp not null,
id_1 varchar(255),
user_id varchar(255),
name varchar(255) not null,
platform varchar(255),
version varchar(255),
workgroup varchar(255),
description text not null,
s3_domain varchar(255)[] not null,
s3_urls varchar(255)[] not null,
installed_frends text not null
);

и есть проблема поле s3_domain installed_frends представляют из себя строки но по факту там вписанны массивы типо installed_frends = ['Killmax','dima_tossster','vasya23big']

им щас у меня очень страдает выборка по этим строкам при агрегации.

Как мне правилььнее поступить ?
вынести эту таблицу вобще в другую бд какуюнибуд ?
перевести строки в массивы (как вобще у постгреса с выборкой по массивам)
Вынеси все что в массивых по таблицам. ( тут большой вопрос потомучто ммассивы эти имют по 100 индексов, и джойнитьь по 100 раз такое себе)
Или есть другое более правильное решение

сразу оговорюс бд юзается для статистики . Предыдущий разраб так все накатал , вот разбираюсь

10 ответов

17 просмотров

>как вобще у постгреса с выборкой по массивам Гораздо лучшэ, чем с выборкой по элементам строк, которые на самом деле не строки, а массивы. >тут большой вопрос Вообще не понял вопроса.

Iz- Автор вопроса
Ilya Anfimov
>как вобще у постгреса с выборкой по массивам Гор...

ну таблица на 15 млн строк. Самый простой способ помимо конвертации в массивы это вынести дыннaые из installed_frends в отдельную таблицу а потом соеденинть как многие ко многим и через join подтягивать данные. Но я никогда не подтягивал столько данных через join. Вот и справшиваю что будет лучьше. Сделать из этого массив, Сделать из этого несколько таблиц и подтягивать через join, или вытащить в другую бд.

Iz
ну таблица на 15 млн строк. Самый простой способ ...

Второй вариант -- ну, в принцыпе так и надо. Лет хотя бы 10 назад я сказал бы, что только так и надо... Но на практике во-первых при маленьких массивах -- массивы могут быть быстрее, во-вторых в постгрессе нет индэксов на join и несколько таблиц, а на массивы -- есть. Потому всё сложно и требует анализа запросов, которые будут идти к базе. Но в большынстве случаев -- вторая таблица один-ко-многим правильнее и быстрее.

Iz- Автор вопроса
Iz- Автор вопроса
Ilya Anfimov
Второй вариант -- ну, в принцыпе так и надо. Лет ...

я тут прикинул в таблице 15 милионов строк, в ней есть массивы которые хранятся строкой, массивы эти длинной могут быть 1000 пунктов если я это все переведу в отдельные таблицы то таблица (которая будет многое ко многим), она же будет просто овер гигантская

Iz
я тут прикинул в таблице 15 милионов строк, в ней...

Гигантская -- это когда не влезает на бытовой SSD.

Iz
я тут прикинул в таблице 15 милионов строк, в ней...

А разных вариантов классификатора у вас сколько? И какие у вас агрегации и пр. запросы про s3_domain? А то может быть s3_domain можно заменить на bitset А может быть оставить как есть, просто добавить gin индекс

Iz- Автор вопроса
alex che
А разных вариантов классификатора у вас сколько? И...

gin индексы на всех строках стоят, ну например есть строка installed_frends = ['Killmax','dima_tossster','vasya23big'] и надо найти всех у кого есть vasya23big и еще с десяток других васянов

Iz
gin индексы на всех строках стоят, ну например ...

Поиск Васянов должен работать быстро при наличии gin индекса. Что медленно работает?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта