sql >> Database teknologi >  >> RDS >> Mysql

Sammenligning af fuldtekstsøgemaskine - Lucene, Sphinx, Postgresql, MySQL?

Godt at se, at der er nogen, der har snakket om Lucene - for det aner jeg ikke.

Sphinx derimod kender jeg ret godt, så lad os se om jeg kan være behjælpelig.

  • Rangering af resultatrelevans er standard. Du kan opsætte din egen sortering, hvis du ønsker det, og give specifikke felter højere vægtning.
  • Indekseringshastigheden er superhurtig, fordi den taler direkte til databasen. Enhver langsomhed vil komme fra komplekse SQL-forespørgsler og u-indekserede fremmednøgler og andre sådanne problemer. Jeg har heller aldrig bemærket nogen langsomhed i søgningen.
  • Jeg er en Rails-fyr, så jeg aner ikke, hvor nemt det er at implementere med Django. Der er dog et Python API, der følger med Sphinx-kilden.
  • Søgetjenestens dæmon (searchd) er ret lav på hukommelsesbrug - og du kan sætte grænser for hvor meget hukommelse indekseringsprocessen bruger også.
  • Skalerbarhed er, hvor min viden er mere skitseret - men det er nemt nok at kopiere indeksfiler til flere maskiner og køre adskillige søgte dæmoner. Det generelle indtryk, jeg får fra andre, er dog, at det er temmelig godt under høj belastning, så at skalere det ud på tværs af flere maskiner er ikke noget, der skal håndteres.
  • Der er ingen understøttelse af 'menede-du' osv. - selvom disse nemt nok kan gøres med andre værktøjer. Sphinx stammer ord ved at bruge ordbøger, så "kørsel" og "køre" (for eksempel) vil blive betragtet som det samme i søgninger.
  • Sphinx tillader dog ikke delvise indeksopdateringer for feltdata. Den almindelige tilgang til dette er at opretholde et delta-indeks med alle de seneste ændringer, og genindeksere dette efter hver ændring (og de nye resultater vises inden for et sekund eller to). På grund af den lille mængde data kan dette tage et spørgsmål om sekunder. Du skal dog stadig re-indeksere hoveddatasættet regelmæssigt (selvom hvor regelmæssigt afhænger af volatiliteten af ​​dine data - hver dag? hver time?). De hurtige indekseringshastigheder holder dog det hele ret smertefrit.

Jeg aner ikke, hvor anvendeligt dette er i din situation, men Evan Weaver sammenlignede nogle få af Common Rails-søgemulighederne (Sphinx, Ferret (en havn i Lucene for Ruby) og Solr), der kører nogle benchmarks. Det kunne være nyttigt, tror jeg.

Jeg har ikke undersøgt dybden af ​​MySQL's fuldtekstsøgning, men jeg ved, at den ikke konkurrerer hastighedsmæssigt eller funktionsmæssigt med Sphinx, Lucene eller Solr.



  1. Julen kommer tidligt (Oracle 12.2)

  2. Hvordan NU() virker i MariaDB

  3. Hvordan kombinerer jeg data fra to separate tabeller til en enkelt markør?

  4. Mysql-databasesynkronisering mellem to databaser