baserproject / basercms

baserCMS : Based Website Development Project
http://basercms.net
Other
165 stars 126 forks source link

【ブログ】ブログ記事の件数が多い場合にブログ設定を保存しようとするとエラーになる #1424

Open seto1 opened 4 years ago

seto1 commented 4 years ago

概要

ブログ記事の件数が多い場合にブログ設定を保存しようとするとエラーになります。

記事件数2000件で確認しました。 BlogContent->afterSave内の検索用テーブルへの登録処理が原因でタイムアウトになっているようです。

baserCMS version : 4.3.4-dev

TODO

ryuring commented 4 years ago

連鎖をどっかで切らねばですね

seto1 commented 4 years ago

ブログ設定保存時の連鎖を切って、記事全体の検索テーブルへの登録は別に機能を作るのもいいかもしれません。 そちらの機能はPHPの実行時間制限を切った上で、「記事件数が多い場合には時間がかかる可能性があります。」などの注意書きを入れておくと分かりやすいですよね。

ryuring commented 4 years ago

@seto1 ログ追ったんですが、 5b27a7135564a52c40a8602699f303316d737d30 ブログ設定からブログ記事に反映する内容って、次のもののようです。

あと、ブログを非公開にした際、検索インデックスを削除するという処理も必要そうです。

ブログ名称を変更した際や、配置フォルダを変更した際には、「検索インデックスの再構築をしてください」とメッセージを表示する仕様にするとかですかね。

ryuring commented 4 years ago

コンテンツツリー上でD&Dで動かした際も影響あるなー

seto1 commented 4 years ago

なるほど。ブログ設定保存時に変更されるブログ記事の検索データの項目はURLのみなのですね。

でしたら、一括変更系のクエリに変更するとかなりスピードアップしそうです。

UPDATE mysite_search_indices SET url = REPLACE(url, '/news/archives/', '/news2/archives/') WHERE model = 'BlogPost' AND content_id = 10

また、コンテンツツリー上でのD&Dの件なのですが、ブログを移動しても検索データ内の記事のURLが変更されない問題を見つけたので別途issueを作成します。

ryuring commented 4 years ago

@seto1 どちらにせよ、独自実装をせず、「検索インデックスの再構築」機能に任せた方がいいかなと考えてます