成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

redis實現(xiàn)分頁查詢 mysql表數(shù)據(jù)量太大,達(dá)到了1億多條數(shù)據(jù),除了分庫分表之外,還有沒有其他的解決方式?

mysql表數(shù)據(jù)量太大,達(dá)到了1億多條數(shù)據(jù),除了分庫分表之外,還有沒有其他的解決方式?在正常配置下,MySQL只能承載2000萬數(shù)據(jù)(同時讀寫,表中有大文本字段,單服務(wù)器)?,F(xiàn)在已經(jīng)超過1億,而且還在

mysql表數(shù)據(jù)量太大,達(dá)到了1億多條數(shù)據(jù),除了分庫分表之外,還有沒有其他的解決方式?

在正常配置下,MySQL只能承載2000萬數(shù)據(jù)(同時讀寫,表中有大文本字段,單服務(wù)器)?,F(xiàn)在已經(jīng)超過1億,而且還在增加,建議按以下方式處理:

1子表。它可以按時間或一定的規(guī)則進(jìn)行拆分,以便盡可能地查詢子表中的數(shù)據(jù)庫。這是最有效的方法。特別是寫,放入一個新表,并定期同步。如果記錄不斷更新,最好將寫入的數(shù)據(jù)放在redis中,并定期同步表3的大文本字段,將它們分隔成一個新的獨立表。對于較大的文本字段,可以使用NoSQL數(shù)據(jù)庫

4優(yōu)化體系結(jié)構(gòu),或者優(yōu)化SQL查詢,避免聯(lián)合表查詢,盡量不要使用count(*)、in、recursion等性能消耗語句

5使用內(nèi)存緩存,或者在前端讀取時增加緩存數(shù)據(jù)庫。重復(fù)讀取時,直接從緩存中讀取。

以上是一種低成本的管理方法,基本上幾個服務(wù)器就可以做到,但是管理起來有點麻煩。

當(dāng)然,如果總體數(shù)據(jù)量特別大,而且您不關(guān)心投資成本,可以使用集群或tidb

普通分頁

普通分頁用于緩存。您可以直接找到它并按頁將其放入緩存,但這種緩存方法有許多缺點。

如果無法及時更新緩存,則一旦數(shù)據(jù)更改,所有以前的分頁緩存都將無效。

例如,在像微博這樣的場景中,微博下有排名靠前的次數(shù)。這在傳統(tǒng)的分頁中很難處理。

一個主意

最近,我想到了另一個主意。

數(shù)據(jù)緩存在redis中,ID為key;

數(shù)據(jù)ID和排序得分保存在redis的skip list中,即Zset;

查找數(shù)據(jù)時,首先從redis的skip list中提取相應(yīng)的分頁數(shù)據(jù),得到ID list。

使用multi-get一次從redis獲取ID列表中的所有數(shù)據(jù)。如果有缺少某個ID的數(shù)據(jù),將從數(shù)據(jù)庫中搜索并返回給用戶,搜索到的數(shù)據(jù)將按ID緩存在redis中

在最后一步,您可以有一些提示:

例如,如果缺少某個ID數(shù)據(jù),首先直接返回給用戶,然后前端使用Ajax請求丟失的ID數(shù)據(jù),然后動態(tài)刷新。

還有一些優(yōu)化可能會將操作與Lua腳本合并,但是考慮到Lua腳本比較慢,您可能需要仔細(xì)測試它們。

如果您使用的是Lua腳本,則可以在一個請求中完成以下操作:

查找頁面上的所有文章,返回緩存文章的ID和內(nèi)容,以及不在緩存中的文章的ID列表。

其他事項:Lua支持LRU模式,類似memcached。但奇怪的是,沒有人這樣使用它。

也許redis已經(jīng)準(zhǔn)備好存儲redis很長時間了,我不擔(dān)心內(nèi)存容量。