カスタムアプリで、大量の注文データの中から特定の商品(バリエーション)を含むものを検索する機能を開発しています。
カスタムアプリの開発環境は以下の通りです。
- Ruby on Rails v6.0.3 + shopify_api gem v9.2.0
以下のコードの通り、REST API を通して Order を大量に取得し、それぞれの Order の LineItem に検索したバリエーションが含まれるかどうかを走査するという実装を行いました。
class Order < ShopifyAPI::Order> MAX_ORDER_LIMIT_PER_PAGE = 250> > class << self> def all_pages(per_page = Order::MAX_ORDER_LIMIT_PER_PAGE)> all_orders = > page = 1> orders = Order.find(:all, params: {limit: per_page})> all_orders << orders> while orders.next_page?> page += 1> orders = orders.fetch_next_page> all_orders << orders> end> all_orders.flatten> end> > # !! このメソッドが遅い> def find_by_variant_id(variant_id)> orders = > Order.all_pages.each do |order|> if order.paid?> if order.line_items.find { |line_item|> line_item.variant_id == variant_id.to_i> }> orders << order> end> end> end> orders> end> end
上記コードの処理速度がかなり遅く(数十件注文のデータの検索に、数十秒かかる)、困っています。
数十から数百の注文データから特定商品を含むデータを検索するにあたって、より良いコードの書き方があれば、教えていただけると有り難いです。