Size: a a a

2020 December 06

СА

Сергей Аксёнов... in ctodailychat
Слава
Там есть контроль целостности, но на регэкспах.
Там в 4 версии даже аналог foreign keys есть, мы его попробовали в новом пилотном проекте - и оказалось, что без него скорее лучше, потому что появляются непредсказуемые краевые эффекты у агрегирующих запросов к репликасету.
источник

С

Слава in ctodailychat
Меня недавно попросили прикрутить к моему сервису некое апи для работы с отзывами, через сторонний сервис. Мне надо было показывать рейтинг неких исполнителей (не таксистов, а кредитных менеджеров), а рейтинг этот складывается из среднего арифметического по всем отзывам (их там под миллион).

Я сделал просто materialized view и всякий раз при синхронизации с внешним сервисом оно само собой пересчитывается. В nosql это вроде есть, но в Кассандре, про монгу не знаю. Если бы я стал это запихивать в DynamoDB, то пришлось бы пересчитывать всё руками.
источник

AR

Anton Revyako in ctodailychat
Слава
Меня недавно попросили прикрутить к моему сервису некое апи для работы с отзывами, через сторонний сервис. Мне надо было показывать рейтинг неких исполнителей (не таксистов, а кредитных менеджеров), а рейтинг этот складывается из среднего арифметического по всем отзывам (их там под миллион).

Я сделал просто materialized view и всякий раз при синхронизации с внешним сервисом оно само собой пересчитывается. В nosql это вроде есть, но в Кассандре, про монгу не знаю. Если бы я стал это запихивать в DynamoDB, то пришлось бы пересчитывать всё руками.
это в какой базе matview сам пересчитывается? )
источник

С

Слава in ctodailychat
Anton Revyako
это в какой базе matview сам пересчитывается? )
В ms sql
источник

С

Слава in ctodailychat
Да и в постгре тоже, вроде
источник

AR

Anton Revyako in ctodailychat
Слава
В ms sql
я только про оракл слышал.
а там инкрементально или целиком?
источник

AR

Anton Revyako in ctodailychat
Слава
Да и в постгре тоже, вроде
неа
источник

С

Слава in ctodailychat
Anton Revyako
я только про оракл слышал.
а там инкрементально или целиком?
Инкрементально, я думаю
источник

С

Слава in ctodailychat
CREATE VIEW [dbo].[SurveyByServiceProvider] WITH SCHEMABINDING
AS
SELECT SUM(reviewRating) AS SumRating, COUNT_BIG(*) as Cnt, ServiceProviderEmail
FROM         dbo.SocialSurvey
GROUP BY serviceProviderEmail
GO

CREATE UNIQUE CLUSTERED INDEX idx_SurveyByServiceProvider
  ON [dbo].[SurveyByServiceProvider] (ServiceProviderEmail);
источник

AR

Anton Revyako in ctodailychat
Слава
CREATE VIEW [dbo].[SurveyByServiceProvider] WITH SCHEMABINDING
AS
SELECT SUM(reviewRating) AS SumRating, COUNT_BIG(*) as Cnt, ServiceProviderEmail
FROM         dbo.SocialSurvey
GROUP BY serviceProviderEmail
GO

CREATE UNIQUE CLUSTERED INDEX idx_SurveyByServiceProvider
  ON [dbo].[SurveyByServiceProvider] (ServiceProviderEmail);
не уверен что в этом случае инкрементальность что-то даст, но сама возможность прикольная
источник

AR

Anton Revyako in ctodailychat
А, не, ServiceProviderEmail в конце просмотрел ) тогда может и даст

Вообще забавно - всю жизнь пишу поля для группировки вначале.  Чтобы group by 1,2,3,4 можно было написать (не повторяйте это дома)
источник

С

Слава in ctodailychat
Это наверное хорошая практика.
источник

AR

Anton Revyako in ctodailychat
+ одно правило про порядок агрегатов в анализатор )))
источник

СА

Сергей Аксёнов... in ctodailychat
Слава
Меня недавно попросили прикрутить к моему сервису некое апи для работы с отзывами, через сторонний сервис. Мне надо было показывать рейтинг неких исполнителей (не таксистов, а кредитных менеджеров), а рейтинг этот складывается из среднего арифметического по всем отзывам (их там под миллион).

Я сделал просто materialized view и всякий раз при синхронизации с внешним сервисом оно само собой пересчитывается. В nosql это вроде есть, но в Кассандре, про монгу не знаю. Если бы я стал это запихивать в DynamoDB, то пришлось бы пересчитывать всё руками.
Это один способ решения проблемы. Можно придумать другие: например организовать отправку новых отзывов в очередь с exactly once delivery (AWS SQS или RabbitMQ) и агрегировать эту очередь, переводя её в простые инкременты. Это драматически снизит нагрузку на систему, имхо.
источник

С

Слава in ctodailychat
Сергей Аксёнов
Это один способ решения проблемы. Можно придумать другие: например организовать отправку новых отзывов в очередь с exactly once delivery (AWS SQS или RabbitMQ) и агрегировать эту очередь, переводя её в простые инкременты. Это драматически снизит нагрузку на систему, имхо.
>exactly once delivery (AWS SQS)

Нет там exactly once delivery, только в FIFO. И это экстремально глупо, из-за сотни новых записей поднимать очередь сообщений.
источник

СА

Сергей Аксёнов... in ctodailychat
Слава
>exactly once delivery (AWS SQS)

Нет там exactly once delivery, только в FIFO. И это экстремально глупо, из-за сотни новых записей поднимать очередь сообщений.
А чем плохо FIFO? Оно ещё и порядок гарантирует, полезно, если, например, отзывы можно редактировать.

Зависит, опять же. Ну если вы например уже в AWS, то сервисом больше, сервисом меньше. Если у вас уже есть где-то RabbitMQ - просто ещё один топик в нём будет.
источник

С

Слава in ctodailychat
Кстати, про exactly once delivery в RabbitMQ я тоже слышу впервые. Возможно это и работает при одной ноде RabbitMQ, но что делать, если получатель умер?
источник

С

Слава in ctodailychat
Сергей Аксёнов
А чем плохо FIFO? Оно ещё и порядок гарантирует, полезно, если, например, отзывы можно редактировать.

Зависит, опять же. Ну если вы например уже в AWS, то сервисом больше, сервисом меньше. Если у вас уже есть где-то RabbitMQ - просто ещё один топик в нём будет.
Оно например плохо тем, что для него триггер на лямбду появился совсем недавно, а до того надо было опрашивать по таймеру.
источник

СА

Сергей Аксёнов... in ctodailychat
Слава
Кстати, про exactly once delivery в RabbitMQ я тоже слышу впервые. Возможно это и работает при одной ноде RabbitMQ, но что делать, если получатель умер?
Там есть механизм ack, если получатель взял сообщение и не ackнул его за заданное время - оно возвращается.
источник

EZ

Eduard Zhuk in ctodailychat
Сергей Аксёнов
Там есть механизм ack, если получатель взял сообщение и не ackнул его за заданное время - оно возвращается.
Это называется at least once
источник