Rails: ElasticSearchとRedis Streamsのストリームを使う(翻訳)

概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: ElasticSearch and Redis streams 原文公開日: 2018/01/16 著者: Dmitry Polyakovsky(@dmitrypol) Rails: ElasticSearchとRedis Streamsのストリームを使う(翻訳) Redis Listsは、データをメインのデータストアからElasticSearchに移動するジョブのキューとして使えます。時系列データをRedisに残し、かつElasticSearchにコピーする必要がある場合はどうでしょうか。 前回の記事では、国内小売りチェーン向けのRails Webサイトを構築しました。このときは、Redis ListsをElasticSearchへのETLデータキューとして用い、検索頻度の高い郵便番号を記録するためにRedisSortedSetsも用いました。さらに、day_of_weekやhour_of_dayによる検索でRedis Stringsによるカウンタを用いました。今回の新たな要件は、各検索とパラメータ(クエリごとの郵便番号や製品)の正確な検索時刻を追えるようにすることです。この機能は、どの製品をどのテンポにストックしておくべきかを顧客が決定する上で役に立ちます。 Redis Streams 通常、この検索データはGETリクエストの一部としてアプリのログに出力され、Logstashを用いてこれをElasticSearchに保存できます。しかし今回はこのデータをStreamsで最初にRedisに保存します。Streamsは、Redis 4.0.xでリリース予定の新しいデータ構造です。 class StoreLocator def initialize zipcode:, query: @zipcode = zipcode @query = query … end def perform # search code here record_stats end private def record_stats key = “search_log:#{Time.now.strftime(“%Y-%m-%d”)}” REDIS_CLIENT.xadd(key, ‘*’, … Continue reading Rails: ElasticSearchとRedis Streamsのストリームを使う(翻訳)