EZTABLE IDEAS 是 EZTABLE 成員揮灑熱情和大家分享專業及創意的網誌。 EZTABLE 讓消費者 24 小時都可以在網路訂位全台灣最優質的餐廳,同時提供餐廳經營者 e 化的訂位管理系統 (雲端、iPad、智慧型手機)

How is EZTABLE’s Restaurant Search Implemented

八月 25 2011 Published by under Engineering

EZTABLE是一家提供網路訂位服務的公司,作為一個雲端服務,部落格中有點技術文章也是很合理的。兩個月前,Alex告訴我餐廳搜尋頁太慢了,於是我們就花了點時間改善它,現在也上線快兩個月了。

 

原本的實作方式使用MySQL full-text search,直接找所有的關鍵字欄位,外加檢查所有餐廳的訂位規則,列出可訂位的時間,把Query Log拿出來一看,光是Query數量就多的驚人,更別提Ajax無限向下捲的功能使用了MySQL的limit子句,當然我們都知道limit很慢 … 。秉持著Lean Startup的精神,為了快點讓產品上線,當初採用這樣的實作也沒有任何不恰當之處。

 

然而,隨著使用者的增加,當初的設計就不太合適了,因為server快爆炸了,我們做了以下改進:

1. 用Apache Solr取代MySQL full-text search

每天晚上定期將Database的資料更新到Solr,並輔以部分的real-time update,除了速度更快和更好的scalability外,豐富的query支援也讓我們少寫了很多複雜的code。Server的部份使用Jetty,Client的部份則是使用PHP的Solr extension跟部分的REST API。

2. 用Redis作Cache

餐廳的訂位規則千奇百怪,十分複雜,光是算出可以訂位的時間,就要下無數的SQL query,即使其中沒有任何Slow query但是整體加起來就是很慢。其實可訂位時間還滿適合Cache的,除非餐廳調整或是有消費者訂位或修改,資料並不會有任何更動。一開始我們有考慮用Memcached,但是其實我們需要一些比較複雜的操作,例如刪除一整個Set,最後選用了Redis。

Redis其實也用在EZTABLE很多地方,例如訂位牆的API用了到sorted set。( EZTABLE會在今年開放Open API )

 

經過改善之後,餐廳搜尋頁速度快了不少(< 500ms average),關鍵字搜尋也不再miss連連,最棒的是還有了autocomplete。都用了Solr,把餐廳放到地圖上是一定要的啦!秉著open的精神,歡迎大家拿Search API去mashup,Just open your Firebug if you dont want to wait for the documentation.

有任何建議,歡迎和我們交流討論。

工商服務:EZTABLE正在徵程式設計師,想要做最酷的應用,改善人們的生活,歡迎聯絡我們!

York Tsai,

Software Architect @ EZTABLE

Related Posts Plugin for WordPress, Blogger...

No responses yet

發表迴響