亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將大型數據集拆分成較小的部分以供 Web 查看

將大型數據集拆分成較小的部分以供 Web 查看

PHP
藍山帝景 2022-12-30 17:43:23
背景我正在為 Web 應用程序開發一個 Web 平臺。該平臺的關鍵功能之一是用戶管理。因此,我實現了一個登錄系統,使注冊用戶能夠登錄平臺和應用程序。這是使用包含登錄憑據、用戶標識、聯系信息等的 MySQL 數據庫實現的...問題我遇到的問題是用戶表。該表可能會非常大。因此,如果管理員想要根據用戶在列表中的位置編輯特定用戶的信息,則管理員將不得不滾動瀏覽可能有數千條記錄以找到正確的記錄。我正在尋找一種算法,它將把它分成大小約為 N 的組,并將這些組顯示為管理員可以單擊的范圍:#0-B、CF、GL、MR 等....研究這是我迄今為止進行的研究:數據庫分區 - PHP 或 MySQL 更好?1 張非常大的桌子還是 3 張大桌子?MySQL 性能關于分區,我在網上找到了很多關于對數據庫表進行分區的文章,但沒有任何內容可以解決我正在嘗試做的事情。到目前為止我做了什么我編寫了一個從 Web 服務器離線運行的程序,該程序返回每個存儲桶 0-9 和 AZ 的計數。對于小于閾值的計數,它將桶組合成一個范圍并將其保存到數據庫中。因此,如果桶 0-9 和 A、B 的總數小于閾值,則范圍變為#0-B。如果桶的大小大于閾值,我在嘗試弄清楚如何從桶中獲取范圍時遇到問題。我考慮了以下解決方案:一個遞歸函數,不斷向下鉆取用戶名,直到它在閾值范圍內。如果我能讓它工作,這將是理想的。由于這是離線運行的,我喜歡的另一個解決方案是將整個存儲桶加載到內存中并從那里拆分。這樣做的缺點是潛在的內存使用。我感興趣的另一個想法是 #2 的一個變體,它將桶的一部分加載到內存中并對其進行處理。這會將內存使用量減少到或多或少的固定數量,但需要更多時間來處理。編輯 5-11/2020:基于一個答案和評論,我可以有一個搜索字段,當條目數縮小到閾值以下時,它會使用 JSON 填充列表(這是個好主意)。但是,我確實有我將與您分享的代碼:此代碼有效,但對于測試數據,它在分區表中創建了約 17,500 個條目,并且有相當多的條目計數為零。function part_recurse2($prefix){    global $CONFIGVAR;    global $charList;    global $charCount;    $list = dbCountScan($prefix);    for ($i = 0; $i < count($list); $i++)    {        $char = substr($charList, $i, 1);        if ($list[$i] >= $CONFIGVAR['user_partition_max_size']['value'])        {            part_recurse2($prefix . $char);        }        else        {            writeRange($prefix . $char, $prefix . $char, $list[$i],                substr($prefix . $char, 0, 1));        }    }}
查看完整描述

1 回答

?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

滾動瀏覽可能有數千條記錄

編寫查詢,可能是臨時的,以過濾出更少的記錄。如果管理員需要滾動瀏覽超過幾十條記錄,那么你(和數據庫)就讓他失望了。

分頁——不要使用OFFSET; “記住你離開的地方”:http: //mysql.rjweb.org/doc.php/pagination

分區——否;你還沒有提出一個它會受益的案例。你可以簡單地說WHERE name LIKE 'J%'or WHERE name >= 'P' AND name < 'T'(for p,q,r,s)INDEXname以;開頭 但我懷疑這是否真的對管理員有幫助。

“一個不斷向下鉆取的遞歸函數”——這就是 BTree 索引已經為您做的事情。簡單地做WHERE name > $leftoff ORDER BY name LIMIT 20。即,LIMIT用于桶大?。煌瑫r不要打擾預定義桶邊界。

“潛在內存使用”——讓數據庫擁有大部分可用內存通常更好。

1 表 vs 3 -- 請詳細說明這些表中的內容。

搜索中

正如其他人所說,使用某種搜索機制可能是找到所需記錄的最快方法。不要讓管理員滾動瀏覽數千行。

提供一個表格,其中包含一項或多項內容供管理員填寫

  • 完整的用戶名。(問題:拼寫錯誤/不知道確切的拼寫)

  • 通配符部分名稱。例子:'段%'; 然后顯示所有以 Dan 開頭的用戶名。

  • 大量的超鏈接列表,每個用戶一個。最多可達幾千個;我會建議不要這樣做。

  • 用戶的一個屬性——開始日期、無活動等等。然后搜索該屬性。

對于這些部分情況,拒絕顯示超過100個用戶名;如果不止于此,請要求管理員提供更多詳細信息。不要為分頁增加的復雜性而煩惱。

我已經實施了各種這些和其他機制。回想起來,我唯一一次對幾十個項目使用分頁是在我需要對所有項目采取行動時。示例:從旅行中的一千張圖片中挑選一張放入“相冊”。這包括看每張照片足夠長的時間來挑選或拒絕每一張。此外,我使用 AJAX 來單擊一次所需的所有操作。



查看完整回答
反對 回復 2022-12-30
  • 1 回答
  • 0 關注
  • 127 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號