Český fulltext a sdílené slovníky

14
Český fulltext a sdílené slovníky Prague PostgreSQL Developers Day 2012 Tomáš Vondra ([email protected]) lightning talk

Upload: tomas-vondra

Post on 28-Nov-2014

765 views

Category:

Technology


4 download

DESCRIPTION

Standardní implementace ispell slovníků v PostgreSQL má bohužel několik nevýhod co se CPU a paměti týká. Napsal jsem extension která umožňuje slovníky inicializovat jen jednou a sdílet je mezi spojeními.

TRANSCRIPT

Page 1: Český fulltext a sdílené slovníky

Český fulltext a sdílené slovníkyPrague PostgreSQL Developers Day 2012

Tomáš Vondra ([email protected])

lightning talk

Page 2: Český fulltext a sdílené slovníky

Kdo používá zabudovaný fulltext?

Page 3: Český fulltext a sdílené slovníky

SELECT id, nadpis FROM dokumenty WHERE fts_idx @@ to_tsquery('cs','hledám');

Page 4: Český fulltext a sdílené slovníky

snowball

● algoritmická normalizace slov● slovesa na infinitiv● podstatná jména na 1. pád● ...

● super věc● málo paměti● rychlé odezvy

Page 5: Český fulltext a sdílené slovníky

Bohužel nefunguje pro češtinu :-(

Okay

Page 6: Český fulltext a sdílené slovníky

ispell

● založeno na slovníku● sada pravidel (skloňování, časování)● slovník (slovo + jak skloňovat)

Page 7: Český fulltext a sdílené slovníky

ispell

● založeno na slovníku● sada pravidel (skloňování, časování)● slovník (slovo + jak skloňovat)

● tři problémy● per connection● inicializace● zabírá paměť● …

Actually...It's Not Okay

Page 8: Český fulltext a sdílené slovníky

inicializace

● slovník se musí načíst a naparsovat● CPU, I/O● ~ přes vteřinu, podle systému● … nic moc :-(

● standardní řešení● connection pool● … ale nic není tak růžové

Page 9: Český fulltext a sdílené slovníky

CPU vs. RAM

● krátká vs. dlouhá spojení● oslíkovo dilema● krátká spojení – opakovaná inicializace (CPU)● dlouhá spojení – kopie statických dat (RAM)

● 25 connections + 2 slovníky (cs + cs_ascii)

500 MB

● standardně víc connections (100 ?)

Page 10: Český fulltext a sdílené slovníky

ispell vs. RAM

● virtualizovaná prostředí● VPS● sdílené servery

Tam všude je (často) nedostatek RAM.

Page 11: Český fulltext a sdílené slovníky

co s tím?

Challenge Accepted

Page 12: Český fulltext a sdílené slovníky

shared_ispell

● načítá slovníky do sdílené paměti● jednorázová inicializace● každý slovník uložen jen jednou

● používá se stejně jako obyčejný ispell

● paměť je nutno vyhradit předem● ne všechny slovníky

Page 13: Český fulltext a sdílené slovníky

shared_ispell API

● info o paměti● shared_ispell_mem_used()● shared_ispell_mem_available()

● slovníky / stop words● shared_ispell_dicts()● shared_ispell_stoplists()● shared_ispell_reset()

Page 14: Český fulltext a sdílené slovníky

shared_ispell

http://github.com/tvondra/shared_ispell

http://pgxn.org/dist/shared_ispell/

ispell slovník (UTF-8)

http://github.com/tvondra/ispell_czech