0

我几乎完成了一个大型网站的开发。

唯一的问题是我总是让 MySQL 消失错误......

我在stackoverflow上发布了另一个问题,但没有得到我的答案

所以我的问题是 Joomla 是否适合大型用户(500 万用户)的 CMS 解决方案?

我花了将近 5 个月的时间来开发这个......现在虽然我在一个 Quad 专用服务器(2 GB 内存)上,但我觉得 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

4

1 回答 1

2

好的!没问题。您必须意识到这是 Joomla 和 Wordpress 的常见问题(正如我在我对您的另一个问题的其他回答中向您解释的那样:Joomla 2.5 比 Joomla 1.5 Querywise 快得多

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

我看到这是您在任何 Joomla CMS 中都无法轻松处理的问题!但是有一些方法(在我看来)可以在这里和那里减少一点负载。

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

解决方案 #1:将数据库拆分为 2 个或更多数据库(我将解释如何做到这一点)
解决方案 #2:Hack 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 万条记录时它是可以接受的。

我真的很希望这会对你一起做所有这些事情有很大帮助。

于 2012-05-13T13:33:59.780 回答