gpt4 book ai didi

php - Joomla 可以处理 jos_users 表中数百万用户的查询吗?

转载 作者:行者123 更新时间:2023-11-29 08:54:13 26 4
gpt4 key购买 nike

我即将完成一个大型网站的开发。

唯一的问题是我总是遇到 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 的常见问题(正如我在对您的另一个问题的其他回答中向您解释的那样:Is Joomla 2.5 much faster than Joomla 1.5 Querywise)

由于您在过去的 6 个月里一直在研究它,并且您已经知道该网站背后有一个巨大的数据库,所以我所说的正是可以在 Joomla CMS 的有限范围内为您提供帮助的内容。

我发现这是一个在任何 Joomla CMS 中都无法轻松处理的问题!但有一些方法(在我看来)可以减少各处的负载。

您可以按照这两个步骤进行操作,可能还有更多步骤,但让我们先尝试这两个步骤:

解决方案#1:将数据库拆分为 2 个或更多数据库(我将解释如何做到这一点)
解决方案 #2:破解 Joomla 核心以访问用户和 session 表
解决方案 #3:将 jos_users 表拆分为相等数量的记录
解决方案 #4:编写一个清理 session 表的 cronjob

解决方案#1:

第 1 步:将 jos_users 和 jos_session 表放入两个新的独立数据库中。将它们称为 db_jos_user 和 db_jos_session。

第 2 步:从主数据库中删除 jos_users 和 jos_session 表。

第 3 步:使用各自的名称为每个 View 创建 View ,并使用该数据库名称指向表。

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 不会感到惊讶,它不会知道它是 View 还是其后面的表格。

解决方案#2:

破解用户身份验证插件并通过创建数据库的新实例(您在以下解决方案中拆分)来对来自不同数据库的用户进行身份验证。您可以开发一个逻辑来确定为哪些用户选择哪个表。这样您就可以减少数据库的负载。您可能还必须实现一个逻辑来将用户插入/更新到各自的数据库中。这是您必须在核心用户组件和用户登录模块内部进行工作的地方。

解决方案#3:

您可以将表拆分为更多数据库。在您的自定义身份验证模块中,尝试使用“union”或一一查询在对所有数据库的单个查询中一一命中数据库(这样您可能会节省一些数据库命中)。您可以根据用户名对它们进行排序,这样当他们登录时您就知道要访问哪个数据库。这将大大减少您的点击次数。

解决方案#4:

编写一个 cron 作业,该作业按设定的时间间隔运行,以清理 session 表。 session 表包含属于访客或用户的所有信息。因此,您必须记住定期清洁它。如果用户 session 处于非事件状态最多 20 分钟,或者您想要删除它,您也可以执行此操作。您可能需要在您的网站上放置一条通知,告知用户 session 如果事件时间超过 20 分钟,将被自动删除或更用户友好的内容。

结论:

尽管当您将数据库和一个表分割成许多部分时,这看起来很愚蠢,但实际上这是您这样做的理想时机。它不会花费您太多时间,也不会损害您的 Joomla/数据库。不过,逆转很容易!

我希望所有这些对你有用。我认为一起完成所有这些工作没有任何问题,除了它会给您带来工作开销,但实际上当您的数据库中有超过 500 万条记录时,这是可以接受的。

我真的非常希望这对您一起完成所有这些事情有很大帮助。

关于php - Joomla 可以处理 jos_users 表中数百万用户的查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10404161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com