为并行搜索引擎和数据库建模API有什么好的设计模式?

时间:2012-01-22 04:39:41

标签: design-patterns search jpa entity

(这是在Java项目中)

我正在使用与关系数据库并行的搜索引擎。感兴趣的主要对象是“列表”。它在合成样式结构中有大约5个其他实体。一个是位置,另一个是复杂的时间和日期定义。

根据我的经验和研究,Solr,Lucene,Elastic SEarch上的搜索比任何添加了全文和地理索引的数据库更快。所以,这就是为什么我希望对数据库中的数据使用搜索引擎。此外,搜索引擎将包含比数据库更精细的时间条目,更具体的是与formualaic。

因此,在参考设计模式时:目标是让CRUD从API发生到实体上的数据库内容,以及在搜索引擎索引中实例化的所有时间和地理排列。

我与合作伙伴进行过讨论,我相信他说的是对的 为了保持低耦合,“列表”类(再次,数据中数据层次结构的顶部)不应该知道搜索引擎,并且没有添加静态函数来搜索搜索引擎。他表示,“责任链”设计模式可能是允许API的CRUD同时对数据库和搜索引擎内容起作用的适当方式。我对此的看法是不正确的。

我一直关注http://sourcemaking.com/design_patterns,我认为Facade模式http://sourcemaking.com/design_patterns/facade可能是最好的。但我想听听其他意见。

提前谢谢。

PS。我正在开发一个能够注入Spring IOC的osem层(http://en.wikipedia.org/wiki/Compass_Project)。该层是为ElasticSearch定制的。到目前为止,它不支持事务或外键(并且可能永远不会这样做)。但是它会有注释钩子来开发它们。你可能想看看它。它在https://github.com/kwince/osemManager。目前正在进行两个分支。我将在下周决定合并哪一个。

1 个答案:

答案 0 :(得分:1)

Facade模式更适合在一个相对简单的界面后隐藏一些复杂的子系统。

根据我的理解,您有两个不同的系统,并且您希望向两者发送相同的请求。您需要知道这两个系统之间的关系是什么:

  • 如果某个系统有某种形式的偏好而不是另一个系统你会使用责任链:你发送一个请求,如果第一个系统可以处理它,你会得到结果,如果没有,请求会去到链中的下一个系统,依此类推。
  • 如果某个系统通过另一个系统的结果进行某种形式的增强或增强,你会使用Decorator,所以请求首先进入“外部”系统,它调用“内部”系统,得到一些结果,然后用自己的数据装饰它们并返回装饰结果;
  • 如果您只想要并行查询2个独立系统,那么使用“just do it”pattern =)使用框架中的一些parralel原语,发送2个请求,等待两个结果,将它们提交给合并函数。

希望这有帮助。