Český fulltext a sdílené slovníky
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](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/1.jpg)
Č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](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/2.jpg)
Kdo používá zabudovaný fulltext?
![Page 3: Český fulltext a sdílené slovníky](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/3.jpg)
SELECT id, nadpis FROM dokumenty WHERE fts_idx @@ to_tsquery('cs','hledám');
![Page 4: Český fulltext a sdílené slovníky](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/5.jpg)
Bohužel nefunguje pro češtinu :-(
Okay
![Page 6: Český fulltext a sdílené slovníky](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/11.jpg)
co s tím?
Challenge Accepted
![Page 12: Český fulltext a sdílené slovníky](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022080209/5481149db4af9fbe158b603c/html5/thumbnails/14.jpg)
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