TL; DR :这个问题与
optimizing the design of a backend search engine
有关:我们的想法是返回一个完整的html页面,尽快显示搜索结果。
我认为elasticsearch和redis适合这份工作,但我还没有决定。 服务器将是node.js,数据库为mongoDB。
不会使用前端框架,服务器将返回普通的html。
(*)注意:我在服务器端设计方面经验不足,所以我的方法可能很幼稚
首次搜索:
- run a server function that makes an elasticSearch query and returns some json;
- create scraps of HTML from the returned json and store them in Redis
(for caching purposes);
- store the search keywords and the keys of the html scraps in Redis.
后续搜索只会:
- recognize the search keywords, and get the html scraps keys from Redis;
- get the html scraps values;
然后服务器:
- build the html page from the scraps;
- Return the html page.
想象一下,你有一个相当大的文章集合,比如100,000,你打算在你的网站上出售。
All articles are stacked in a MongoDb database
并且有多个键(标题,类别,评论,图片等等)
要实现搜索,文章集合已为indexed in elasticSearch
。
第一个弹性搜索查询将返回json containing a list of articles
。
对具有相同搜索词的elasticSearch的后续查询将返回相同的json,但现在将extract it from the elasticSearch cache
。
但如果您不使用前端技术并希望从服务器返回plain html
,则仍需要insert that json into a templator, create an html page, then return to the end user
。
如果您缓存了whole html page into a superfast key/value database like Redis
,则后续搜索中不会使用templator和elasticSearch:Redis会识别搜索字词,并立即返回html。
或者,如果在评论/答案中建议跳过Redis,那么临时工具计算后的html could be stored into a cdn
。
请说明建议设计的哪些步骤不必要/缺失,以及原因。
感谢您的帮助!
答案 0 :(得分:3)
评论摘要:
您不需要Redis进行缓存,因为EL负责所有这些并且它可以以相同的方式进行扩展。 http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/filter-caching.html
您不应存储整个HTML,不需要该阶段,因为EL会在50分钟内响应您的结果。
对于热门/热门静态页面,您可以在选择的Web服务器之前轻松获得一个Varnish,并且可以提供10k ops / sec
使用CDN,仅当CDN成本低于支付可以动态生成它的实例时。
不要将模板和从存储访问的时间放在相同的存储桶中。虽然我认为第一个将在1毫秒以下,但后者 - 在一个好的集群上可能是50毫秒。也许你将从所有其他路线(DNS,负载平衡器,日志记录)再有50ms,所以我认为这样你可以在110ms以下的时间内完成整个静态的工作。
答案 1 :(得分:2)
恕我直言,你不想使用REDIS,只是为此查询elasticsearch。 ES是一个非常复杂的搜索引擎,可以让你远远超出开箱即用。 如果你使用REDIS进行缓存,你将首先查询redis,如果你有一个CACHE_MISS,你可以查询elasticsearch。 我推荐这个YouTube视频,以便第一印象魔术弹性搜索将您交给您:http://www.youtube.com/watch?v=52G5ZzE0XpY
BTW:如果存储键/值,则弹性搜索不会仅存储json'但值尽可能高效地存储。如果它是一个整数,则它被存储为整数...
编辑:我建议使用kibana,至少在开发阶段。如果您对通过kibana查询的内容感到满意,可以创建普通的html网站。 此外,您可能需要查看elasticsearch-kopf以深入了解ES。