kilimandjaro
@kilimandjaro
web developer

Можно ли в таблице сущности хранить информацию о колличестве ссылающихся сущностей?

Вот например есть таблица с товарами. Есть пользователи, которые могут писать на эти товары свои отзывы. Предположим, что количество пользователей растет каждый день на 100..200 штук и оставляют они все больше и больше отзывов по 500..10000 в день.

Так вот, если раньше мы вытаскивали из таблицы отзывов количество отзывов к товару (т.е. один запрос с выбором товара, еще один с количеством отзывов для него), то теперь есть идея сделать просто доп. колонку для товара с именем "qty_reviews" типа целочисленное и там обновлять счетчик после каждого добавления или удаления отзыва (добавился отзыв к товару, увечили qty_reviews). Например таблица будет такой

--------------------------------
| id | name | qty_reviews |
--------------------------------
Пример немного абстрактный, пример с цифрами хочу подчеркнуть высоконагруженность проекта (т.е. планируются такие нагрузки). База сейчас используется mysql (в дальнейшем будет еще Cassandra)
Можно ли создавать такие колонки для товара, которые будут постоянно обновляться?

У меня есть подозрение что такими запросами можно или убить базу или созадать коллизию при записи\выдаче
  • Вопрос задан
  • 384 просмотра
Пригласить эксперта
Ответы на вопрос 3
@dmitryKovalskiy
программист средней руки
Ну чтобы не убить базу и не создавать коллизии существует инструкция WITH NOLOCK
MySQL NOLOCK syntax is equivalent to WITH (NOLOCK) in SQL Sever, and it is a transaction isolation level that defines how data is available during an update. With other words, it is a property that defines at what point changes made by an update operation will become available in a row, table or database to requesting processes.

По поводу денормализации - могу вам предложить сделать таблицу ReviewsCounts где хранить id товара и число отзывов. Соответственно вы не будете грузить триггерами таблицу самих товаров. Можете сделать парный ключ idтовара/номер отзыва и число отзывов делать через группировку id товара и MAX(номера отзыва).
Ответ написан
Adamos
@Adamos
А что, просто добавить индекс на поле идентификатора товара недостаточно?
Насколько я понимаю, при его наличии запрос на количество строк с таким индексом базу практически не напрягает.
Или я ошибаюсь?
Ответ написан
У меня есть подозрение что такими запросами можно или убить базу или созадать коллизию при записи\выдаче


MySQL: https://dev.mysql.com/doc/refman/5.0/en/set-transa...
А вот с Кассандрой будет сложнее: www.datastax.com/dev/blog/row-level-isolation
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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