Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Importing Wikipedia in Plone

Importing Wikipedia in Plone

Eric BREHAULT – Plone Conference 2013

Makina Corpus

October 02, 2013
Tweet

More Decks by Makina Corpus

Other Decks in Technology

Transcript

  1. ZODB is good at storing objects • Plone contents are

    objects, • we store them in the ZODB, • everything is fine, end of the story.
  2. But what if ... ... we want to store non-contentish

    records? Like polls, statistics, mail-list subscribers, etc., or any business-specific structured data.
  3. Problem 1: You need to manage a secondary system •

    you need to deploy it, • you need to backup it, • you need to secure it, • etc.
  4. How to store many records in the ZODB? • Is

    the ZODB strong enough? • Is the ZCatalog strong enough?
  5. My grandmother often told me "If you want to become

    stronger, you have to eat your soup."
  6. souper.plone and souper • It provides both storage and indexing.

    • Record can store any persistent pickable data. • Created by BlueDynamics. • Based on ZODB BTrees, node.ext.zodb, and repoze.catalog.
  7. Add a record >>> soup = get_soup('mysoup', context) >>> record

    = Record() >>> record.attrs['user'] = 'user1' >>> record.attrs['text'] = u'foo bar baz' >>> record.attrs['keywords'] = [u'1', u'2', u'ü'] >>> record_id = soup.add(record)
  8. Record in record >>> record['homeaddress'] = Record() >>> record['homeaddress'].attrs['zip'] =

    '6020' >>> record['homeaddress'].attrs['town'] = 'Innsbruck' >>> record['homeaddress'].attrs['country'] = 'Austria'
  9. Access record >>> from souper.soup import get_soup >>> soup =

    get_soup('mysoup', context) >>> record = soup.get(record_id)
  10. Query >>> from repoze.catalog.query import Eq, Contains >>> [r for

    r in soup.query(Eq('user', 'user1') & Contains('text', 'foo'))] [<Record object 'None' at ...>] or using CQE format >>> [r for r in soup.query("user == 'user1' and 'foo' in text")] [<Record object 'None' at ...>]
  11. souper • a Soup-container can be moved to a specific

    ZODB mount- point, • it can be shared across multiple independent Plone instances, • souper works on Plone and Pyramid.
  12. Plomino & souper • we use Plomino to build non-content

    oriented apps easily, • we use souper to store huge amount of application data.
  13. Plomino data storage Since 1.14, documents are pure CMF. Capacity

    about 100 000. Usally the Plomino ZCatalog contains a lot of indexes.
  14. Typical use case • Store 500 000 addresses, • Be

    able to query them in full text and display the result on a map. Demo
  15. What is the limit? Can we import Wikipedia in souper?

    Demo with 400 000 records Demo with 5,5 millions of records
  16. Thoughts • What about a REST API on top of

    it? • Massive import is long and difficult, could it be improved?
  17. Makina Corpus For all questions related to this talk, please

    contact Éric Bréhault [email protected] Tel : +33 534 566 958 www.makina-corpus.com