Php

數據庫記錄太多,如何處理?MySQL複製好不好?

  • November 24, 2012

我正在做一個社交網路,並提出了以下關於數據庫儲存的問題。讓我們以 facebook 為例,假設每個使用者有 2,000 張照片,只有 1,000 個使用者,假設每張照片有一行,總共等於 2,000,000 行。

現在想像一下 100,000 個使用者,這將是 20 億行(在一個表中?)

問題是如何處理?使用同一張表的複製,然後按分配給一個扇區的使用者 ID 進行選擇?

認為

photos_0
photo, date

photos_1
photo, date

依此類推,然後沿使用者 ID 儲存後綴 0、1 等,並從該點開始工作。

還有其他更知名的解決方案嗎?

//media

mysql_query("DROP TABLE IF exists media");
$vals='sbid int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(sbid),
vids varchar(200),
vidshd varchar(200),
vidso varchar(200),
duration varchar(200),
videow varchar(200),
videoh varchar(200),
notify varchar(200),
pics varchar(200),
picss varchar(200),
picsm varchar(200),
picsr varchar(200),
picsa varchar(200),
faces longtext,
descr longtext,
location varchar(200),
sbidv varchar(200),
id varchar(200),
albumid varchar(200),
albumn varchar(200),
norder int(200),
oldorder int(200),
title varchar(200),
shot varchar(200),
shott varchar(200),
nye varchar(200),
visibility varchar(200),
datetimep int(200),
datetimep_pp int(200)';
$vals=str_replace("
"," ",$vals);
$predefined='';
mysql_query("CREATE TABLE media ($vals) AUTO_INCREMENT=10000000;");

以上是範例表,我是否可以在其上儲存多達數十億條記錄,然後正常更新並從中選擇 id=’ $ uid’ and $ uid=使用者的 ID。

這不是最終的表結構,但我認為不可能只使用一個表,所以我考慮了複製,然後在更改表時需要更改所有表,這聽起來很難更改數百個或使用大量查詢的數千個表,而如果它只是一個表,則意味著單個查詢,這是我對複製的擔憂之一,但我也不知道它是否是解決此類最終問題的實際解決方案.

分區和正確的索引加上不要忘記正確的多伺服器設置。從有關索引和分區的 MySQL 文件開始。當您達到這樣的數據庫大小時,您應該能夠負擔得起知道該怎麼做的人。

對於大型數據集,您可能需要查看其他解決方案,例如 Hadoop。不要忘記記憶體 Redis/memcached。

根據我在大數據集方面的經驗。您的表有太多列,沒有正確的索引。因此,如果您對索引的生產(正確設置)速度進行正確的索引和分區,分區列將在每個分區 40,000,000-50,000,000 之後開始降級。

引用自:https://dba.stackexchange.com/questions/29232