Project

General

Profile

Enhancement(機能追加・改善) #1898

[PATCH] i18nビヘイビアを使用しているテーブルへのクエリが何度も実行される

Added by Youichi Kimura over 8 years ago. Updated over 7 years ago.

Status:
Invalid(無効)
Priority:
Normal(通常)
Target version:
Start date:
2011-01-30
Due date:
% Done:

0%


Description

概要

「マイホーム」のページにアクセスすると、以下のようにtranslationテーブルに対するクエリが数回実行されます。

SELECT s.id AS s__id, s.name AS s__name, s.application AS s__application FROM sns_term s WHERE (s.application = 'pc_frontend' AND s.id IN (SELECT s.id AS s__id FROM sns_term_translation s2 WHERE (s2.lang = 'en')))
SELECT s.id AS s__id, s.value AS s__value, s.lang AS s__lang FROM sns_term_translation s WHERE (s.id IN ('5'))
SELECT s.id AS s__id, s.value AS s__value, s.lang AS s__lang FROM sns_term_translation s WHERE (s.id IN ('1'))
SELECT s.id AS s__id, s.value AS s__value, s.lang AS s__lang FROM sns_term_translation s WHERE (s.id IN ('3'))
SELECT s.id AS s__id, s.value AS s__value, s.lang AS s__lang FROM sns_term_translation s WHERE (s.id IN ('9'))
SELECT s.id AS s__id, s.value AS s__value, s.lang AS s__lang FROM sns_term_translation s WHERE (s.id IN ('11'))

同様なアクセスがnavigation_translationテーブルに対しても行われます。
速度面での改善があるかどうかは分かりませんが、クエリにleftJoinを使用して実行回数を減らした修正を https://github.com/upsilon/OpenPNE3/commit/cb1804b で行いました。

Associated revisions

Revision 9a2a26d0 (diff)
Added by Youichi Kimura over 8 years ago

eager loading in fetching i18n translation records (fixes #1898)

Revision 010b0eff (diff)
Added by Youichi Kimura over 7 years ago

Revert "eager loading in fetching i18n translation records (fixes #1898)"

This reverts commit 9a2a26d06d488a9aab89ee0efa39e2a1dc73cbc1.

Conflicts:

lib/util/opDoctrineQuery.class.php

Revision 085e4e99 (diff)
Added by Youichi Kimura about 7 years ago

Revert "eager loading in fetching i18n translation records (fixes #1898)"

This reverts commit 9a2a26d06d488a9aab89ee0efa39e2a1dc73cbc1.

Conflicts:

lib/util/opDoctrineQuery.class.php

History

#1 Updated by Shogo Kawahara over 8 years ago

  • Subject changed from i18nビヘイビアを使用しているテーブルへのクエリが何度も実行される to [PATCH] i18nビヘイビアを使用しているテーブルへのクエリが何度も実行される
  • Priority changed from Low(低め) to Normal(通常)

#2 Updated by Shinichi Urabe over 8 years ago

  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to Youichi Kimura
  • Target version set to OpenPNE 3.7.0

#3 Updated by Youichi Kimura over 8 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

更新履歴 9a2a26d06d488a9aab89ee0efa39e2a1dc73cbc1 で適用されました。

#4 Updated by Minoru Takai almost 8 years ago

  • Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)

master ブランチにおいて、管理画面のナビゲーション設定で「日本語設定の場合に、英語版名称がでない」という問題があり、原因を追ったところこのチケットでの修正 9a2a26d0 に辿り着いたので差し戻します。

i18n ビヘイビアを使用しているテーブルに関して、効率の悪い DB アクセスが発生していることを改善する方針は良いと思います。しかし、このチケット内容や 9a2a26d0 の差分を見ても、どのような問題があり、どのような方針で修正したのかが詳しく分かりませんでした。

  • 修正前のコードにはどのような問題があるのか
    • どこがどのように実装されているために効率が悪いのか
  • どのような方針で改善が可能なのか
    • leftJoinTranslation() メソッドを用意していますが、これを用いると修正前と同じ結果をより効率的に得られるのでしょうか
  • 修正を加えるべき箇所はどこなのか
    • opI18N クラスで $this->terms->configure('en', $application) を削除していますが、これはもともとどのような意味を持つ処理だったのでしょうか
    • NavigationTable と SnsTermTable 以外にはこの修正は適用しないでよいものなのでしょうか

このコメント時点で分かっている問題は次のものです:

  • 日本語と英語しか使わない前提(※)のとき、管理画面で、日本語設定の場合に、ナビゲーション設定で英語の文言が表示されない
    • ※ノンカスタマイズのまま、特に OpenPNE.yml にある supported_languages が以下の設定値のままである場合。
      # 対応言語
      supported_languages: ['en', 'ja_JP']
      
  • 対応言語が複数ある場合(例えば上記の設定値が ['en', 'ja_JP', 'fr', 'de'] の場合)に、管理画面で、ナビゲーション設定で、設定言語以外の文言が表示されない(英語設定時に日本語が表示されるのは例外)。

前述の通り、私がこの修正がどのような考えに基づくものなのか分かっていないので、 9a2a26d0 を見た上で改善案を示すことができません。ここで示した問題は、 NavigationTable にて leftJoinTranslation() を使っている行を削除するだけで直りますが、それはこの修正を行わない状態に戻すのと変わらないと思います。

このチケットで触れられている部分に詳しい方、あるいは実装者の方に、この問題も含めて対応が可能かどうか検討してもらえると助かります。

#5 Updated by Youichi Kimura over 7 years ago

  • Status changed from Rejected(差し戻し) to Invalid(無効)
  • % Done changed from 50 to 0

note-4 の通り、当チケットでの修正に関係する別の問題が発生しているため、 9a2a26d0 をrevertします。
また、修正量に対して大きな改善も見込めないためこれ以降の修正も行わずチケットを閉じます。

Also available in: Atom PDF