我目前正在开发一个dataimport处理程序,它从MySQL中检索数据以便快速搜索。它包括导入根实体jQuery('#hexpand').animate({width:151,height:151},400);
和一些子实体(CabinCategoryFares
,Cruise
,RouteDay
)。
此导入有效,但由于例如...之间的关系非常慢。 Ship
和CabinCategoryFares
是多对一的,因此在Cruise
被解雇时有许多相同的查询。
为了缓解这种情况,我试图在子实体上实现Cruise
缓存。在一个片段下面,原作非常大。
SortedMapBackedCache
对于从<document name="Cruises">
<entity name="CabinCategoryFare" transformer="RegexTransformer" query="SELECT CabinCategoryFare.cruise_id FROM CabinCategoryFare">
<entity name="Cruise" cacheImpl="SortedMapBackedCache" cacheKey="Cruise.id" cacheLookup="CabinCategoryFare.cruise_id"query="SELECT Cruise.id FROM Cruise">
</entity>
</entity>`
读取的每个字段,都会返回NULL
。我可以从日志中看出Cruise
正在运行dataimporthandler
查询,但它不会在此之后返回任何结果或任何错误。它似乎无法在Cruise
上找到任何匹配,但登录cacheLookup
课程是不存在的,我完全失去了什么&#39; s发生了,或者说它为什么不发生。
有什么想法吗?
答案 0 :(得分:2)
发现问题:
1. Solr / DIHCacheSupport.java中的错误:https://stackoverflow.com/a/21732907/3012497
(cacheKey在进程中的某个地方得到大写,cacheLookup不需要总是使用大写的cacheLookup)
2. Cruise实体的查询使用分组函数(GROUP_CONCAT),但没有GROUP BY子句。这不是一个未缓存的问题(因为WHERE子句),但仍然只返回一行没有位置。
3. DIHCacheSupport似乎只能使用字符串键,int键会导致日志中没有显示的异常。
希望这可能会节省几个小时。