У меня очень большая таблица, содержащая 2 миллиарда строк по 50 атрибутов. Не все заполнены и это редкая матрица.
Мне не нравится составлять запрос на основе всех значений, и индексы сейчас слишком велики. Я потерял производительность.
Для моего нового подхода я хочу добавить дайджест-столбец, содержащий дайджест всех атрибутов в определенной строке.
Для этого хэша нет требований безопасности, так что даже MD5 подойдет.
Мне лучше построить простую строку, содержащую представления всех ключей и значений вместе? Или есть лучший способ?
Например, данный хеш:
attr_hash = { attribute1: "Please",
attribute2: nil,
attribute3: "don't",
attribute4: nil,
attribute5: nil,
attribute6: nil,
attribute7: "immediately",
attribute8: "",
attribute9: "downvote",
attribute10: "my",
attribute11: nil,
attribute12: "question" }
будет ли это предпочтительнее (и я уверен, вы согласитесь, что это прекрасно):
attr_str = attr_hash.select{|k,v| v!="" && !v.nil?}.keys.sort.map{|k| "#{k}=#{attr_hash[k]}" }.join("^^")
digest = Digest::MD5.hexdigest(attr_str)
, который дает красивую строку:
790470349a791b9897afd52a336ab2bb
Я могу проиндексировать этот столбец и получить очень, очень быстрое время отклика из базы данных. И я вряд ли получу много столкновений от этого. И если есть столкновение один раз в 5 или 10 миллионов раз, это нормально.
Я глубоко ценю любые идеи.