Mat*_*tis 4 php mysql database performance database-design
我正在重建拥有大量流量的网站的后台系统.
这是应用程序的核心,我构建数据库的这一部分的方式对于大量代码和即将开展的工作至关重要.下面描述的系统每天必须运行数百万次.我将不胜感激任何关于这个问题的意见.
背景是用户可以添加他或她白天吃的东西.
简化,这个过程或多或少是这样的:
id, user_id, date, type, food_data.我目前拥有的是一个巨大的数据库,里面有食物项目,可以从中搜索.食品存储有关于通用名称(如"猪肉片")和生产者(如"可口可乐")的信息,以及所需的其他详细信息.
问题摘要:
我的问题是,我不知道存储数据的最佳方式,以便以我需要的方式轻松访问,并且数据库不会失控.
考虑每天增加1至7餐的100万用户.为了存储每餐的每个食品,每天和每个用户可能每天创建(1*avg_num_meals*avg_num_food_items)百万行.
以某种压缩方式存储数据(如food_data是一个json_encoded字符串),会显着减少行数,但同时也很难创建"最常用的食物项目"列表和其他动态统计信息.
该表应该分成几个表吗?如果是这种情况,他们将如何互动?
该网站目前托管在中端CDN上,并使用LAMP(Linux,Apache,MySQL,PHP)骨干网.
Pau*_*ier 10
粗略地说,您需要一个完全规范化的数据结构.您希望为用户提供一个表,为餐提供一个表(每餐一个条目,参考用户;您可能还希望在此表中有一个用餐的时间/日期),以及一个MealItems表,只是Meal和Food Items表之间的关联表.
因此,当用户进入并创建帐户时,您在"用户"表中创建一个条目.当用户报告他们吃过的膳食时,您可以在膳食表中创建记录,并在MealItems表中为他们报告的每个项目创建记录.
这种结构使得每餐都可以直接获得可变数量的物品,而不会浪费大量空间.您可以通过相对简单的查询确定膳食中物品的表示,以及确定任何一个用户在任何给定时间段内消耗的物品总数.
此规范化表结构将支持非常大量的记录,并支持对数据库的大量查询.
| 归档时间: |
|
| 查看次数: |
357 次 |
| 最近记录: |