Size: a a a

Clojure — русскоговорящее сообщество

2021 August 19

SM

Stas Makarov in Clojure — русскоговорящее сообщество
пока точно непонятно. допустим в 90% строк будет одно значение, в 9% два, в остальных 3+.
А это тут принципиально важно?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
ну, один enum не опишет случая с 2+ выставленными значениями
источник

SM

Stas Makarov in Clojure — русскоговорящее сообщество
да, если важна производительность наверное надо бы битмапу использовать, но смущает что из кода будет не очень удобно, или я не прав? и сходу глядя в бд не очень понятно что за значение.
источник

SM

Stas Makarov in Clojure — русскоговорящее сообщество
это понятно, я поэтому указал enum/array of enums
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
так ответ-то может отличаться для случая с enum и случая с массивом енумов 😊
источник

SM

Stas Makarov in Clojure — русскоговорящее сообщество
буду признателен за рассмотрение обоих случаев :) хотя бы кратко самое важное или про что гуглить)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
я бы рассмотрел вариант с целочисленным значением, где каждый бит — это соответствующий флаг 😊
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
а что тут нагуглишь
любое решение есть набор компромиссов, выбирать-то вам
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
если хочется «может так, а может и вот так», то вариант с jsonb выглядит наиболее гибким
источник

PP

Pavel Peganov in Clojure — русскоговорящее сообщество
Семантически больше всего похоже на set.
Самое близкое. что я знаю в постгресе, это hstore, в котором забили на значения.
Если хочется регулярно искать записи с конкретными значениями ключами (оператор h ? key), можно построить по ним GIN-индекс.
источник

SM

Stas Makarov in Clojure — русскоговорящее сообщество
ну т.е. bitmap. Да, мне скорее  jsonb больше нравится. Кажется что будет меньше кода и понятнее, что глядя на код, что в бд.

Вот от кучи булевых столбцов немного корёжит, но как бы хорошо аргументировать почему :)
источник

SM

Stas Makarov in Clojure — русскоговорящее сообщество
Спасибо! Не слышал про такое. Почитаю.
источник

PP

Pavel Peganov in Clojure — русскоговорящее сообщество
Это почти что jsonb. Только одноуровневый 🙂
Не исключено, что даже реализации пересекаются.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
не слышал про кложурный set?
источник

((

(fun () -> ()) in Clojure — русскоговорящее сообщество
Можно это как-то сократить?
(str/join ", " ((juxt :country :locality :post-code :region :line) ai))
источник

SM

Stas Makarov in Clojure — русскоговорящее сообщество
Про постгресный hstore :)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
ну, я бы сказал, что array of enum ближе к сету, чем hstore
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
с hstore картинка странная получается для булевских значений, когда «Keys and values are simply text strings.»
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
то есть либо в значение пишется всякая фигня, и boolean на основе присутствия пары выбирается
либо ещё какие костыли
источник

PP

Pavel Peganov in Clojure — русскоговорящее сообщество
hstore ближе в том ключе, что уникальность ключей в него заложена как в тип данных изначально. Массиву навязать уникальность значений будет не так просто.
А с булями у hstore для этого случая всё просто — если ключ есть, true. Нету — false. (Если в сценарии различать false и null нет необходимости).
источник