我正在重建具有大量流量的網站的後臺系統。我應該如何爲這個問題設計數據庫結構?
這是應用程序的核心,我構建這部分數據庫的方式對於大量代碼和即將開展的工作至關重要。下面描述的系統每天需要運行數百萬次。我很感謝在這個問題上的任何投入。
背景是用戶可以添加他或她在白天吃的東西。
簡化,該過程或多或少是這樣的:
- 用戶到達該網站,該網站列出了他/她的選擇爲天(如果進入之前下面介紹的步驟)。
- 用戶可以添加一頓飯(由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