sql >> Database >  >> NoSQL >> Redis

Automatisch aanvullen opnieuw instellen

Als je te maken hebt met een grote dataset, raad ik aan om dit als een poging te implementeren. Ik heb een klein beetje Ruby bij elkaar gegooid dat dit zou doen:

    require 'rubygems'
    require 'redis'
    
    class RedisTrie
      TERMINAL = '+'
    
      def initialize(prefix)
        @prefix = prefix
        @r = Redis.new
      end
    
      def add_word(word)
        w = word.gsub(/[^a-zA-Z0-9_-]/, '')
        key = "#{@prefix}:"
    
        w.each_char do |c|
          @r.zset_add key, c.bytes.first, c
          key += c
        end
    
        @r.zset_add key, 0, TERMINAL
      end
    
      def add_words(*words)
        words.flatten.compact.each {|word| add_word word}
      end
    
      def suggest(text)
        @r.zset_range("#{@prefix}:#{text}", 0, -1).map do |c|
          (c == TERMINAL) ? text : suggest(text + c)
        end.flatten
      end
    end
    
    rt = RedisTrie.new('trie')
    
    rt.add_words %w( apple automobile carwash oil-change cranky five ruthie axe auto )
    
    p rt.suggest(ARGV.shift.to_s)

Bijvoorbeeld:

    $ ruby RedisTrie.rb
    ["apple", "auto", "automobile", "axe", "carwash", "cranky", "five", "oil-change", "ruthie"]
    $ ruby RedisTrie.rb a
    ["apple", "auto", "automobile", "axe"]
    $ ruby RedisTrie.rb au
    ["auto", "automobile"]
    $ ruby RedisTrie.rb aux
    []

Lees meer over Tries in Wikipedia's artikel over Tries.

U zult zeker uw suggestiemethode willen optimaliseren om niet ALLE waarden te retourneren, maar alleen de eerste X-waarden die het vindt terug te geven. Het zou het doel teniet doen om de hele gegevensstructuur te herhalen.



  1. Hoe hernoem je een MongoDB-database?

  2. Hoe kan ik verwijderde ruimte terugwinnen zonder `db.repairDatabase()`?

  3. Hoe verwijder je veel mongodb-collecties tegelijk?

  4. MongoDB $setEquals