我正在重建具有大量流量的网站的后台系统。我应该如何为这个问题设计数据库结构?
这是应用程序的核心,我构建这部分数据库的方式对于大量代码和即将开展的工作至关重要。下面描述的系统每天需要运行数百万次。我很感谢在这个问题上的任何投入。
背景是用户可以添加他或她在白天吃的东西。
简化,该过程或多或少是这样的:
- 用户到达该网站,该网站列出了他/她的选择为天(如果进入之前下面介绍的步骤)。
- 用户可以添加一顿饭(由1组成的无限量的不同食物及其数量)。餐点通过搜索字段添加,并按不同类型组织(如“早餐”,“午餐”)。
- 在膳食建设过程中,会显示最常用的食品列表(主要由该用户,其次为所有用户),以便快速选择。
- 膳食将存储在一个FoodLog表中,其中包含如下内容:
id, user_id, date, type, food_data
。
我目前拥有的是一个庞大的数据库与食品项目进行搜索。食物项目储存有关于常用名称(如“猪排”)和生产者(如“可口可乐”)的信息以及所需的其他详细信息。
问题总结:
我的问题是,我不知道存储数据的最佳方式为它在我需要的方式,并没有数据库走出去的手方便。
考虑一百万用户每天增加1至7餐。为了存储每餐中的每个食物,每天和每个用户每天可能创建(1 * avg_num_meals * avg_num_food_items)百万行。
以某种压缩方式存储数据(如food_data是一个json_encoded字符串),会显着减少行数量,但同时使其难以创建“最常用的食品”列表和其他即时统计。
该表应该分成几个表吗?如果是这样,他们将如何互动?
该网站目前托管在中档CDN上,并且使用LAMP(Linux,Apache,MySQL,PHP)骨干网。
您已经想到了经典的数据库设计师的困境:规范化或不规范化。 –
我正在阅读它:) – Mattis
你是不是指VPS而不是CDN。你可以安装软件吗?如果你能,我会建议你使用例如Redis或memcached来研究缓存(使FAST成为地狱)。此外,我会建议您查看APC编译的PHP脚本的字节码。 – Alfred