sql >> Database >  >> NoSQL >> Redis

Indexeren met Redis gesorteerde sets

  1. Ik raad het gebruik van Redis hiervoor ten zeerste af. Je zult een hoop extra aanwijzergegevens opslaan, en als je ooit besluit dat je meer gecompliceerde zoekopdrachten wilt doen, zoals SELECT WHERE first_name LIKE 'jon%' je gaat in de problemen komen. U zult ook extra, zeer grote indexen moeten maken die meerdere kolommen doorkruisen, voor het geval u naar twee velden tegelijk wilt zoeken. Je zult in wezen moeten blijven hacken en een zoekframework opnieuw ontwerpen. Je zou veel beter af zijn met Elastic Search of Solr, of een van de andere frameworks die al zijn gebouwd om te doen wat je probeert te doen. Redis is geweldig en heeft veel goede toepassingen. Dit is er niet een van.

  2. Een waarschuwing terzijde, om je eigenlijke vraag te beantwoorden:ik denk dat je het beste gediend bent met een variant van je eerste oplossing. Gebruik één gesorteerde set per index, maar converteer uw letters gewoon naar cijfers. Converteer uw letters naar een decimale waarde. U kunt de ASCII-waarde gebruiken of elke letter toewijzen aan een waarde van 1-26 in lexicografische volgorde, ervan uitgaande dat u Engels gebruikt. Standaardiseer, zodat elke letter dezelfde numerieke lengte inneemt (dus als 26 uw grootste getal is, wordt 1 geschreven als "01"). Voeg deze vervolgens samen met een decimaalteken ervoor en gebruik dat als uw score per index (d.w.z. "hoed" zou ".080120" zijn). Dit geeft je een goed geordende 1-op-1 mapping tussen woorden en deze nummers. Wanneer u zoekt, converteert u van letters naar cijfers, en dan kunt u alle mooi gesorteerde setfuncties van Redis gebruiken, zoals ZRANGEBYSCORE zonder ze te hoeven herschrijven. De functies van Redis zijn zeer, zeer optimaal geschreven, dus u kunt ze veel beter waar mogelijk gebruiken in plaats van uw eigen functies te schrijven.



  1. Hoe u hoofdletterongevoelige indexen maakt in MongoDB

  2. Het geheugengebruik analyseren en optimaliseren in Redis

  3. Waarom is MongoDB zo snel?

  4. Gelijktijdigheid in gopkg.in/mgo.v2 (Mongo, Go)