
Sergey
21.06.2018
09:31:13
это напрямую на конверсию влияет

Valentin
21.06.2018
09:34:21
Ах да, у меня юзернеймы уникальные потому что ссылки на профили вида site/u/Vasya123

Google

Sergey
21.06.2018
09:37:18

Valentin
21.06.2018
09:39:52
и ты думаешь что для пользователя это важно?
Да, в моём случае суть проекта в том что бы шарить ссылки на свой профиль, а в других проектах - мне кажется это не такая уж и плохая практика, юзеру удобнее запомнить юзернейм нежели создавать закладку на свой профиль к примеру

Sergey
21.06.2018
09:40:15
в твоем сучае - да скорее всего это лучший вариант. Но вообще всем пофиг

Valentin
21.06.2018
09:42:38
Посмотрим.. Опрос сделаю через пару месяцев, вернусь ещё, может статистика какая то ещё появится типа сколько зарегистровалось через соц сети а сколько через емейл+пароль

Константин
21.06.2018
10:04:20
Привет всем! Думаю, что в тему будет вопрос.
Нужна БД для аналитики. В данный момент mysql и crateDb уже не вывозят 800кк записей, количество колонок достаточно большое
Почему сюда пишу, надо чтобы поддержка php была)) может кто работает с такими объемами данных?
Требуются агригации по 20кк и более данных

Bohdan
21.06.2018
10:04:59

Константин
21.06.2018
10:05:21
Раньше крэйт вывозил, но раньше и проходиться по 10кк надо было за раз

Sergey
21.06.2018
10:05:30
если там стандартные для аналитики данные, которые всегда требуют агрегации - касандра, инфлуксдб

Константин
21.06.2018
10:05:32
а теперь тупо памяти не хватает((

Bohdan
21.06.2018
10:05:40
time series в influxDB хорошо идут
но серьёзную нагрузку не пробовал, хотя должно работать ок

Google

Oleg
21.06.2018
10:05:57
кликхаус?

Константин
21.06.2018
10:05:58
ок, буду читать
кликхаус отпал в связи с отсутствием возможности удаления и изменения
чтобы база не пухла мы дополняем данные по часам
в месяц залетает порядка 15-20кк данных
и это уже по часу собранные

Sergey
21.06.2018
10:07:44
а диск штука дешевая
короч надо больше знать о том что вы там храните и что делаете с данными

Bohdan
21.06.2018
10:08:48
influxDB, retention policies, continuous queries

Sergey
21.06.2018
10:08:57

Andrew
21.06.2018
10:28:10
чтобы база не пухла мы дополняем данные по часам
в кх немного другой подход, насколько я понял - лучше делать исходную таблицу - лог данных (собственно facts) и потом навешивать materialized views (projections). В таком случае и изменять данные не нужно (посколько обучно аналитические ивенты иммутабельны).

Artem
21.06.2018
10:42:16
а если правило такое: "Нельзя постить > 3 постов в день с аккаунта", тогда как его проверять? Тоже при помощи БД, в смысле проверять в триггерах и кидать эксепшены?

Danil
21.06.2018
10:47:28
это уже бизнес-логика

Sergey
21.06.2018
10:50:27

Artem
21.06.2018
10:56:02
это уже бизнес-логика
Допустим проверка будет на уровне домена, но в промежутке между закончившейся проверкой и записью в БД может записаться ещё пост, тогда постов в БД будет 4

Danil
21.06.2018
10:56:20
транзакции в помощь

Sergey
21.06.2018
11:00:03
в 90% случаев люди даже не будут сильно париться с таким кейсом

Google

Artem
21.06.2018
11:00:52

Maksim
21.06.2018
11:03:40
редис на уровне key\value асилит даже ботинок)

Artem
21.06.2018
11:04:14
это радует, т.к. я аж целый сапог!
Вообще ещё интересно как это (правило > 3 постов) проверять в коде. Т.к. это вроде как бизнес правило, то проверка должна быть где-то в домене (и тут кстати возникает вопрос - является ли валидация частью домена?). Если делать проверку где-то в методах агрегатов - тогда им нужен будет репозиторий и будет зависимость от репозитория, что по-моему выглядит довольно плохо

Roman
21.06.2018
11:10:27
я как то не уверен, что "правило > 3 поста" является валидацией

Sergey
21.06.2018
11:10:43

Roman
21.06.2018
11:10:45
проверка этого правила

Sergey
21.06.2018
11:10:52

Artem
21.06.2018
11:10:54

Sergey
21.06.2018
11:12:07
инвариант

Sergey
21.06.2018
11:12:28
разберись со значением этого умного слова

Artem
21.06.2018
11:14:26
Как я понял - это правило предметной области, правда меня смущает то, что есть ещё прекондишены и посткондишены

Sergey
21.06.2018
11:19:32
они тоже правила) просто инварианты это про стэйт а прекондишены и посткондишены про то что на вход приходит и на выход

Artem
21.06.2018
11:20:30
то есть прекондишены проверяют входные данные, посткондишены - выходные, а инварианты - состояние?

F01134H
21.06.2018
11:20:36

Sergey
21.06.2018
11:22:40
например у тебя есть объект представляющий ящик яблок. У него есть методы положить и забрать.
У положить прекондишен будет "на вход нам должны дать яблоко а не что-то другое", у забрать посткондишен будет "на выходе будет яблоко а не что-то другое" а у всего ящика будет инвариант что количество яблок н может быть меньше нуля.

Artem
21.06.2018
11:23:56
тайпхинты значит - один из вариантов прекондишенов и посткондишенов, правда с ограниченной функциональностью и встроенные в язык?

F01134H
21.06.2018
11:25:25

Google

F01134H
21.06.2018
11:25:48
почему с ограниченной функциональностью, у тебя тип может быть Apple

Artem
21.06.2018
11:27:45

Sergey
21.06.2018
11:28:05

Admin
ERROR: S client not available

Sergey
21.06.2018
11:29:15
в случае с каким-нибудь active record все похоже но чуть отличается
но это не "валидация входящих данных" это проверка инвариантов, бизнес логика твоя
следует просто разделять эти понятия. И да, у тебя может быть пересечение правил, и да это будет похоже на дублировани

Artem
21.06.2018
11:30:27

F01134H
21.06.2018
11:30:30

Sergey
21.06.2018
11:30:30
похоже но это не оно (а может и оно - it depends)

Artem
21.06.2018
11:41:26
но тогда, если будет 1 проверка в валидации и 2 в виде инварианта - данные придётся загружать 2 раза, что выглядит очень плохо с точки зрения производительности

Sergey
21.06.2018
11:42:00

Artem
21.06.2018
11:43:07
тогда при нарушении инварианта кидать эксепшен, обрабатывать его (как и в случае с unique constraint) и показывать пользователю?

Sergey
21.06.2018
11:44:26
ну то есть нарушение инварианта в таком случае не исключительная ситуация а обыденность, раз у тебя для этого красивая сообщенька юзеру есть

Artem
21.06.2018
11:46:38
просто я не понимаю как это всё соединять с валидацией, т.к. для пользователя это всё просто набор ошибок

Sergey
21.06.2018
11:47:05
а это не надо никак соединять, в этом и прикол
это больше к вопросу UX

Google

Sergey
21.06.2018
11:47:42
как сделать так что бы кнопки небыло что бы ошибку не надо было показывать

Roman
21.06.2018
11:47:58
Это вообще никакого отношения к валидации не имеет

Sergey
21.06.2018
11:48:39

Artem
21.06.2018
11:49:05
но ответ от сервера-то может содержать и данные результата валидации и данные о нарушении инварианта

Sergey
21.06.2018
11:50:32
может, и что? а еще ответ может содержать как ошибку так и какой-то результат
ты ж из этого трагедию не делаешь

Roman
21.06.2018
11:52:21

InvestPerson
21.06.2018
11:53:32
Ребят
Помогите сделать проверку только на цифры
Какой регистр это?

F01134H
21.06.2018
11:54:19
?♂️

Maksim
21.06.2018
11:54:37
простите, не сдержался...
is_numeric() ф-я

Shmaltorhbooks
21.06.2018
11:55:28

Bohdan
21.06.2018
11:55:40
отправляй с такими вопросами в @phpGeeksJunior, пускай там спрашивает