Вы никогда не будете слишком беспокоиться о ресурсах, когда вы впервые начинаете создавать приложение, вы всегда должны иметь в виду ресурсы, пространство, скорость и т. Д., Если трафик вашего сайта резко вырос, и вы никогда не строили для ресурсов, то вы начинаете получать впроблемы.
Что касается системы голосования, лично я бы оставил голоса вот так:
table: product table: user table: user_product_vote
+----+-------------+ +----+-------------+ +----+------------+---------+
| id | product | | id | username | | id | product_id | user_id |
+----+-------------+ +----+-------------+ +----+------------+---------+
| 1 | bananas | | 1 | matthew | | 1 | 1 | 2 |
| 2 | apples | | 2 | mark | | 2 | 2 | 2 |
| .. | .. | | .. | .. | | .. | .. | .. |
Причины:
Во-первых, user_product_vote
не содержит текста, каплии т. д., оно чисто целочисленное, поэтому в любом случае оно потребляет меньше ресурсов.
Во-вторых, у вас есть больше возможностей для доступа к новым объектам в вашем приложении, таким как общее количество голосов за последние 24 часа, продукт с наивысшим рейтингом за последние 24 часаи т. д.
Возьмем, к примеру, этот пример:
table: user_product_vote
+----+------------+---------+-----------+------+
| id | product_id | user_id | vote_type | time |
+----+------------+---------+-----------+------+
| 1 | 1 | 2 | product |224.. |
| 2 | 2 | 2 | page |218.. |
| .. | .. | .. | .. | .. |
И простой запрос:
SELECT COUNT(id) as total FROM user_product_vote WHERE vote_type = 'product' AND time BETWEEN(....) ORDER BY time DESC LIMIT 20
Другое дело, если пользователь проголосовал за 1AM
, а затемЕсли вы попытаетесь проголосовать снова на 2PM
, вы можете легко проверить, когда они голосовали в последний раз, и нужно ли им разрешить голосовать снова.
Существует так много возможностей, которыевас не хватит, если вы будете придерживаться своего возрастающего примера.
Что касается вашего count()
, то, сколько бы вы ни оптимизировали свои запросы, на самом деле это не будет иметь большого значения.
При очень большой базе пользователей использование ресурсов будет рассматриваться с другой точки зрения, например, с точки зрения балансировки нагрузки, в основном настроек сервера, Apache, перехвата и т. Д., С вашими запросами вы можете многое сделать.