2011-01-29 169 views
14

注意:我在這裏搜索了其他類似的問答,沒有其他答案的問題甚至是遠程相似..因此... 我有一個關於MySql的問題表格(更準確地說,來自表格的特定字段 - 即tweetsupdates)。什麼是MySQL表的最大行數

所以這個問題...... InnoDB表上的最大行數是多少?也就是說,如果MyIsam,InnoDB和其他數量之間存在顯着的差異,那麼一般情況下,如果沒有這些差異。其次,如果表格變得非常大,那麼存儲數據的最佳做法是什麼?(同一個表或分割/多個表/ dbs)?

我讀過那個twitter會得到類似於每天1億條推文的東西。在同樣的背景下,我的第二個問題如何適用於Twitter這樣的內容?

回答

14

http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html將允許您計算您的密鑰大小限制。

但我謙恭地建議你不想來存儲像引用完整性和InnoDB的其他功能的事務引擎鳴叫信息,你肯定不把它們都存儲在一個表中的單個DB實例。你把它們分成許多獨立的非SQL數據庫,允許你快速追加,然後將元信息(如hashtags,RTs等)提取到更復雜的數據庫中。在Twitter數據庫架構上的演示文稿很容易在谷歌(例如http://www.slideshare.net/nkallen/q-con-3770885)。

如果您必須將大量數據存儲在一張表中,分區是您的朋友,並且可能Postgres對它有更好的支持。分區表在物理上是幾個邏輯上看起來像一個表的表。你把這些子表(分區)放到不同的磁盤上,獨立地對它們進行維護,等等。另外,一個包含一個非常長的表格的「星形模式」只包含基本列和許多存儲較大但可選列的表格幫幫我。

18

沒有行限制,但一個InnoDB數據庫上size limit

最小表空間大小爲10MB。 最大表空間大小爲四個 十億個數據庫頁(64TB)。這也是 也是表格的最大尺寸。

您可以隨時在同一張表的多個分區中存儲行,並將其存儲在多個文件中。

+0

我的其他問題呢? :)謝謝 – 2011-01-29 09:16:53

+0

@avon_verma:已更新 – ash 2011-01-29 09:39:57

+0

是水平分區作爲Sharding? @ash – edam 2015-05-26 09:27:30

1

的64TB限制表中有下列情況除外:

  • ,它假定innodb_page_size = 16K(默認值)。可以將其設置爲4K和64K之間的2的冪次,從而按比例更改表空間限制。
  • A PARTITIONed表本質上是一堆組織在一起,作爲一個大表行事的'子表'。分區數量前5.6.7的限制是1024.之後,它已經是8192.所以乘以64TB。

行,那隻能給你一個字節限制。此外,它還包括開銷和索引。然後,您需要劃分平均記錄有多大以獲得最大行數。

(這是不容易計算的平均記錄大小。)

答案很簡單:

你或許可以很容易地在一個InnoDB表獲得1萬億「小」的記載。通過一些努力,你可能會達到1000兆。但是我懷疑你在這之前已經耗盡了磁盤驅動器的預算。此外,要花所有時間完成所有的INSERTs

所以,現實的答案:MySQL可以處理'無限'的行數。

現實生活中?我聽說有幾十億行的表格,甚至多達150億。

請參閱我的Limits,但在行數問題上沒有多說。