【发布时间】:2018-11-25 13:20:05
【问题描述】:
我需要设计类似电子商务的功能(考虑酒店预订网站)我们可以输入关键字/部分关键字并需要返回相关结果。 例如:- 如果网站管理员或酒店所有者需要在系统中添加以下酒店详细信息,它也会被添加到缓存中(基本上它会通过缓存写入)。
Hotel-Name: New River
City: NewYork
Rating:4 Star
Rate($):500
我的问题是如何在系统中设计以下几点
- 我是否需要将酒店数据存储在缓存中,因为键值对可能正在使用 Redis 或 Memcache?关键和价值是什么?
- 如果我将它存储为键值对,我将如何使用部分关键字进行搜索(比如输入
river newyork而不是new river newyork) 可以是部分酒店名称和城市的组合吗? - 有什么可能的分片键来分发缓存中的数据?
将此系统视为可扩展为 Goibibo 。
我提出的解决方案:-
阅读下面的两个资源后,看起来我可以使用 Elastic search(ES) 来解决上面提到的所有三点。它会做的是:-
- 创建名称为 hotel_data 的索引,该索引将包含酒店 json 文档的所有可搜索字段的索引
- ES 会将索引存储在内存中
- 然后我可以搜索像search partial words这样的部分词
链接
elasticsearch-from-the-bottom-up
elasticsearch-hello-world-example
但是当我与 CTO 讨论这种方法时,他告诉你正在混合弹性搜索和弹性缓存,并说弹性搜索可以用于搜索和 用于缓存的弹性缓存。
但是当我再次重新阅读这些资源时,我发现弹性搜索同时用于缓存和搜索。所以我发现我的方法没有错。 我的方法有什么问题吗?
【问题讨论】:
-
缓存是为了一些短暂的信息还是为了提高性能?
-
这个答案可能会有所帮助:stackoverflow.com/a/34389625/4604579
标签: elasticsearch caching search e-commerce