簡體   English   中英

Joomla 可以處理 jos_users 表中數百萬用戶的查詢嗎?

[英]Can Joomla handle Queries for Millions of Users in the jos_users table?

我幾乎完成了一個大型網站的開發。

唯一的問題是我總是讓 MySQL 消失錯誤......

我在stackoverflow上發布了另一個問題,但沒有得到我的答案

所以我的問題是 Joomla 是否足夠適合大型用戶(500 萬用戶)或合適的 CMS 解決方案?

我已經花了將近 5 個月的時間來開發這個......現在雖然我在一個 Quad 專用服務器(2 GB Ram)上,但我覺得 Joomla 可能不是這個大型數據庫網站的正確解決方案..

編輯:我只想說清楚我不是在談論流量...它的全新網站。 我說的是某些表中的行數

請指教

MySQL 服務器信息:

MySQL error log: /var/lib/mysql/eta.etalenthunt.com.err

root@eta [~]# cat /etc/my.cnf
[mysqld]
safe-show-database
open_files_limit = 5000
tmp_table_size = 32M
max_heap_table_size = 32M
query_cache_limit=1M
query_cache_size=100M ## 32MB for every 1GB of RAM
query_cache_type=1
max_connections=100
collation_server=utf8_unicode_ci
character_set_server=utf8
delayed_insert_timeout=40
interactive_timeout=30
wait_timeout=60
connect_timeout=60
thread_cache_size=64
key_buffer=32M ## 32MB for every 1GB of RAM
join_buffer=1M
max_connect_errors=20
max_allowed_packet=16M
table_cache=2048
record_buffer=1M
sort_buffer_size=3M ## 1MB for every 1GB of RAM
read_buffer_size=3M ## 1MB for every 1GB of RAM
read_rnd_buffer_size=3M ## 1MB for every 1GB of RAM
thread_concurrency=8 ## Number of CPUs x 2
myisam_sort_buffer_size=16M
innodb_file_per_table=1
innodb_buffer_pool_size=18M ## (>= 18M)

我正在運行 dedi 服務器 XEON QUAD 2 GB

行! 沒問題。 你必須意識到這是 Joomla 和 Wordpress 的一個常見問題(正如我在我對你的另一個問題的另一個回答中向你解釋的那樣: Joomla 2.5 比 Joomla 1.5 Querywise 快得多

由於您過去 6 個月一直在研究它,並且您已經知道該網站背后有一個巨大的數據庫,所以我所說的正是可以在 Joomla CMS 的有限范圍內為您提供幫助的內容。

我發現這是一個您無法在任何 Joomla CMS 中輕松解決的問題! 但是有一些方法(在我看來)可以減少一些地方的負載。

您可以遵循這兩個步驟,可能還有更多步驟,但讓我們先嘗試以下兩個步驟:

解決方案 #1:將數據庫拆分為 2 個或更多數據庫(我將解釋如何做到這一點)
解決方案#2:攻擊用戶和會話表的 Joomla 核心
解決方案 #3:將 jos_users 表拆分為相同數量的記錄
解決方案#4:編寫一個清理會話表的cronjob

解決方案#1:

步驟 1:將您的 jos_users 和 jos_session 表放入兩個新的獨立數據庫中。 稱它們為 db_jos_user 和 db_jos_session。

第 2 步:從主數據庫中刪除 jos_users 和 jos_session 表。

第 3 步:使用各自的名稱為每個視圖創建視圖,並使用該數據庫名稱指向表。

CREATE VIEW jos_users AS SELECT * from db_jos_user.jos_users;
CREATE VIEW jos_session AS SELECT * from db_jos_session.jos_session;

這實際上會減少您的數據庫大小並實際上減少您的數據庫負載。 Joomla 不會感到驚訝,它不會知道它是視圖還是它后面的桌子。

解決方案#2:

破解用戶身份驗證插件並通過創建數據庫的新實例(您在以下解決方案中拆分)來對來自不同數據庫的用戶進行身份驗證。 您可以開發一個邏輯來確定為哪些用戶點擊哪個表。 這樣您就可以減少數據庫的負載。 您可能還需要實現一個邏輯來將用戶插入/更新到他們各自的數據庫中。 這是您必須在核心用戶組件和用戶登錄模塊中工作的地方。

解決方案#3:

您可以將表拆分為更多數據庫。 在您的自定義身份驗證模塊中,嘗試使用“聯合”或一個一個地(這樣您可能會保存一些數據庫命中)在對所有數據庫的單個查詢中一個一個地訪問數據庫。 您可以按用戶名對它們進行排序,以便在他們登錄時知道要訪問哪個數據庫。 這將大大減少您的點擊次數。

解決方案#4:

編寫一個 cron 作業,該作業以設定的時間間隔運行,以清理會話表。 會話表包含屬於訪客或用戶的所有信息。 因此,您必須記住定期清潔它。 如果用戶會話在最多 20 分鍾或任何您想要刪除的情況下處於非活動狀態,您也可以執行此操作。 您可能需要在您的網站上放置一條通知,告訴用戶會話,如果活動超過 20 分鍾將被自動刪除或對用戶更友好的內容。

結論:

盡管當您將數據庫尤其是一個表切成許多部分時看起來很愚蠢,但實際上這是您執行此操作的理想時機。 它不會花費您太多時間,也不會損害您的 Joomla/數據庫。 不過倒車很容易!

我希望所有這些都對你有用。 我認為將所有這些一起做沒有任何問題,除了它會給您帶來工作開銷,但實際上當您的數據庫中有 500 萬條記錄時它是可以接受的。

我真的真的希望這會幫助你一起做所有這些事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM