使用搜索服务器服务层与数据库层来查找实体

时间:2013-04-01 13:31:47

标签: java spring java-ee elasticsearch

如果您同时设置了搜索api(使用Elasticsearch)和存储库层(Spring JDBC),那么无论查询多么简单,您都会使用搜索API吗?它比存储库版本更灵活,但速度稍慢。例如:您是否会使用搜索API来获取某些创作者名称的所有汽车?

1 个答案:

答案 0 :(得分:2)

好像你有一个存储库和ES坐在彼此旁边,有一些重叠的查询功能

存储库的优势(如果我们谈论的是DDD存储库)是为客户端提供一个接口,而不必知道你在后端实际执行查询的方式。

说一个repo实现: getById(id) getByName(name) getByExample(JsonExample) getByFullText(text)

使用您的主数据存储实现getById(或许getByName)我会很好。 (mysql,mongoDB,couchbase或用于提供ES的任何内容)

同时getByFullText(text)肯定会由ES实施,getByExample(JsonExample)也可能。

关键是,通过将实现置于存储库抽象之后,应用程序的其余部分不会/不应该关心您实际实现它的方式。

对于你来说,这意味着,只需要感觉自然(get all cars by some creators name可能适用于ES和你的主数据存储)如果你在路上有一个真正的(性能或其他)理由切换,它只是一行代码,可能在您的存储库实现中。

BTW:为您的查询提供多个不同数据存储的概念称为:Polyglot Persistance.