私は Grails 1.3.7 を休止状態 1.3.7 と MySQL 5.1 で使用しています。次の(簡略化された)ドメイン オブジェクトがあります。
class Document {
String externalId
Date date
String url
String title
Map metadata = new HashMap()
def propertyMissing(String key) { return metadata[key] }
def propertyMissing(String key, String value) { metadata[key] = value }
}
クライアントに返すためにこれらのドキュメントの束をロードする必要がある場合、システムは各ドキュメントに対して個別のクエリを実行して、関連するメタデータを取得する必要があります。メタデータを含む数百のドキュメントを取得するには、妥当なマシンで数十秒かかります。言うまでもなく、これはインタラクティブに使用するには遅すぎます。私のアプリケーションはすべてのデータをブラウザにロードしてユーザーが操作できるようにしたいので、クエリを「ページ」に分割することはできません。
現在、私が実行しているクエリは次のようになります。
Document.executeQuery("select distinct p.document from Posting p where p.topic = :topic", [topic: topic]);
このクエリにより、一連のDocument
インスタンスが作成されますが、これには長い時間がかかります。
Hibernate キャッシュは次のように構成されます。
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider'
}
問題のテーブルは次のとおりです。
mysql> describe document;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| version | bigint(20) | NO | | NULL | |
| date | datetime | YES | | NULL | |
| external_id | varchar(255) | NO | | NULL | |
| title | longtext | YES | | NULL | |
| url | longtext | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
mysql> describe document_metadata;
+--------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------------+------+-----+---------+-------+
| metadata | bigint(20) | YES | | NULL | |
| metadata_idx | varchar(255) | YES | | NULL | |
| metadata_elt | varchar(4096) | YES | | NULL | |
+--------------+---------------+------+-----+---------+-------+
メタデータ テーブルとハード コーディング フィールドをDocument
直接ダンプする以外に、コードのパフォーマンスを向上させるために他にできることはありますか?
遺伝子