SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
Český fulltext a sdílené slovníky
     Prague PostgreSQL Developers Day 2012

           Tomáš Vondra (tv@fuzzy.cz)

                  lightning talk
Kdo používá zabudovaný fulltext?
SELECT id, nadpis
  FROM dokumenty
 WHERE fts_idx @@ to_tsquery('cs','hledám');
snowball
●   algoritmická normalizace slov
    ●   slovesa na infinitiv
    ●   podstatná jména na 1. pád
    ●   ...
●   super věc
    ●   málo paměti
    ●   rychlé odezvy
Bohužel nefunguje pro češtinu :-(




                                Okay
ispell
●   založeno na slovníku
    ●   sada pravidel (skloňování, časování)
    ●   slovník (slovo + jak skloňovat)
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
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é
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 ?)
ispell vs. RAM
●   virtualizovaná prostředí
●   VPS
●   sdílené servery




       Tam všude je (často) nedostatek RAM.
co s tím?




Challenge Accepted
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
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()
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

Weitere ähnliche Inhalte

Ähnlich wie Český fulltext a sdílené slovníky

Perl 6 – jOpenSpace.cz 2017
Perl 6 – jOpenSpace.cz 2017Perl 6 – jOpenSpace.cz 2017
Perl 6 – jOpenSpace.cz 2017David Ondřich
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)almadcz
 
Borek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webBorek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webDevelcz
 
TPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročnéTPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročnéRené Stein
 
Elasticsearch jako chytrá cache
Elasticsearch jako chytrá cacheElasticsearch jako chytrá cache
Elasticsearch jako chytrá cachePatrik Votoček
 
Replikace (CSPUG 19.4.2011)
Replikace (CSPUG 19.4.2011)Replikace (CSPUG 19.4.2011)
Replikace (CSPUG 19.4.2011)Tomas Vondra
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScriptKeyup
 

Ähnlich wie Český fulltext a sdílené slovníky (9)

Perl 6 – jOpenSpace.cz 2017
Perl 6 – jOpenSpace.cz 2017Perl 6 – jOpenSpace.cz 2017
Perl 6 – jOpenSpace.cz 2017
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)
 
Borek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webBorek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro web
 
TPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročnéTPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročné
 
TNPW2-2013-04
TNPW2-2013-04TNPW2-2013-04
TNPW2-2013-04
 
TNPW2-2012-04
TNPW2-2012-04TNPW2-2012-04
TNPW2-2012-04
 
Elasticsearch jako chytrá cache
Elasticsearch jako chytrá cacheElasticsearch jako chytrá cache
Elasticsearch jako chytrá cache
 
Replikace (CSPUG 19.4.2011)
Replikace (CSPUG 19.4.2011)Replikace (CSPUG 19.4.2011)
Replikace (CSPUG 19.4.2011)
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 

Mehr von Tomas Vondra

CREATE STATISTICS - What is it for? (PostgresLondon)
CREATE STATISTICS - What is it for? (PostgresLondon)CREATE STATISTICS - What is it for? (PostgresLondon)
CREATE STATISTICS - What is it for? (PostgresLondon)Tomas Vondra
 
CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?Tomas Vondra
 
PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6Tomas Vondra
 
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016Tomas Vondra
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSTomas Vondra
 
Performance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyondPerformance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyondTomas Vondra
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSTomas Vondra
 
Novinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONBNovinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONBTomas Vondra
 
PostgreSQL performance archaeology
PostgreSQL performance archaeologyPostgreSQL performance archaeology
PostgreSQL performance archaeologyTomas Vondra
 
Checkpoint (CSPUG 22.11.2011)
Checkpoint (CSPUG 22.11.2011)Checkpoint (CSPUG 22.11.2011)
Checkpoint (CSPUG 22.11.2011)Tomas Vondra
 
Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)Tomas Vondra
 
PostgreSQL / Performance monitoring
PostgreSQL / Performance monitoringPostgreSQL / Performance monitoring
PostgreSQL / Performance monitoringTomas Vondra
 

Mehr von Tomas Vondra (14)

CREATE STATISTICS - What is it for? (PostgresLondon)
CREATE STATISTICS - What is it for? (PostgresLondon)CREATE STATISTICS - What is it for? (PostgresLondon)
CREATE STATISTICS - What is it for? (PostgresLondon)
 
Data corruption
Data corruptionData corruption
Data corruption
 
CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?
 
DB vs. encryption
DB vs. encryptionDB vs. encryption
DB vs. encryption
 
PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6
 
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFS
 
Performance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyondPerformance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyond
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFS
 
Novinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONBNovinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONB
 
PostgreSQL performance archaeology
PostgreSQL performance archaeologyPostgreSQL performance archaeology
PostgreSQL performance archaeology
 
Checkpoint (CSPUG 22.11.2011)
Checkpoint (CSPUG 22.11.2011)Checkpoint (CSPUG 22.11.2011)
Checkpoint (CSPUG 22.11.2011)
 
Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)
 
PostgreSQL / Performance monitoring
PostgreSQL / Performance monitoringPostgreSQL / Performance monitoring
PostgreSQL / Performance monitoring
 

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

  • 1. Český fulltext a sdílené slovníky Prague PostgreSQL Developers Day 2012 Tomáš Vondra (tv@fuzzy.cz) lightning talk
  • 3. SELECT id, nadpis FROM dokumenty WHERE fts_idx @@ to_tsquery('cs','hledám');
  • 4. snowball ● algoritmická normalizace slov ● slovesa na infinitiv ● podstatná jména na 1. pád ● ... ● super věc ● málo paměti ● rychlé odezvy
  • 5. Bohužel nefunguje pro češtinu :-( Okay
  • 6. ispell ● založeno na slovníku ● sada pravidel (skloňování, časování) ● slovník (slovo + jak skloňovat)
  • 7. 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
  • 8. 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é
  • 9. 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 ?)
  • 10. ispell vs. RAM ● virtualizovaná prostředí ● VPS ● sdílené servery Tam všude je (často) nedostatek RAM.
  • 12. 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
  • 13. 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()
  • 14. 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