SlideShare ist ein Scribd-Unternehmen logo
1 von 9
Downloaden Sie, um offline zu lesen
MONGODB
Škálovateľné ukladanie neštruktúrovaných metadát k
dokumentom
Problémová oblasť
   Anotácie (metadáta) na Webe
     Web     – veľký => Veľa metadát
       Distribuované úložisko
       Distribuované spracovanie dát

     „Voľná“   štruktúra dát
       Nevhodná   relačná algebra
     „Štandard“:
                Model Open Annotation
     (openannotation.org)
       RDF
       Dopytovanie   prostredníctvom SPARQL
Očakávané štandardné použitie
   Uloženie anotácie
   Aktualizácia anotácie
   Získanie konkrétnej anotácie
   Získanie histórie anotácie (historickej verzie)
   Získanie anotácií z dokumentu
   Dopytovanie nad anotáciami prostredníctvom
    SPARQL – kompatibilita s Open Annotation
Zvažované DBMS
   Bigdata
     Natívne RDF úložisko
     Výkonné voči iným RDF DBMS, reálne stále pomalé

   Casandra
     Dopytovanie po stĺpcoch
     Apache Hadoop - MapReduce

   ChouchDB
     JSON
     MapReduce

   MongoDB
     BSON
     MapReduce
Realizácia
   Kolekcia: Annotations
     Objekty   anotácií - ľubovoľná štruktúra dát s URI
      identifikátorom, spĺňajúca náležitosti modelu OA
     Rýchly prístup ku konktrérnej anotácií

     Pomalé získanie zoznamu anotácií dokumentu

   Kolekcia: Dokumenty
     Objekty  s fixnou štruktúrou – (ID, URI dokumentu –
      indexované, URI anotácie, platnosť anotácie)
     Rýchle získanie zoznamu anotácií

   SPARQL – MapReduce s Finalize
Bigdata vs. MongoDB
600
550
500
450
400
350
300
250
200
150
100
 50
  0
      1    21 41 61 81 101 121 141 161 181 201 221 241 261 281 301 321
      Load Annotations        Retrieve One Annotation   Retrieve Uri List
      Retrieve Object List    Execute SPARQL Query
Práca s MongoDB
   Drivare pre jazyky
     Priama   podpora: C, C++, Erlang, Haskell, Java,
      Javascript, .NET (C# F#, PowerShell, etc), Perl, PHP,
      Python, Ruby, Scala
     Podpora komunity: ActionScript3, Clojure, ColdFusion, D,
      Delphi, Entity, Factor, Go, Groovy, Lisp, Lua, MatLab,
      node.js, Objective C, Opa, PowerShell, Prolog, R, REST,
      Racket, Smalltalk
   REST addon
   JavaScript konzola
C#
using   MongoDB.Bson;                     class Annotation
using   MongoDB.Driver;                   {
using   MongoDB.Bson.Serialization;         [BsonId]
using   MongoDB.Driver.Builders;            public string Uri
                                              { get; set; }
MongoServer server =
  MongoServer.Create(connectionString);       public DateTime Created
MongoDatabase database =                        { get; set; }
  server.GetDatabase(databaseName);
var annotations =                             public bool IsDeleted
  database.GetCollection<Annotation>            { get; set; }
  (collectionName);
Annotation annotation =                       public ITarget[] HasTarget
  new Annotation() {…};                         { get; set; }

annotations.Insert(annotation);               ...
annotation =                              }
  annotations.FindOneById(uri);
JavaScript Console
> use Test
switched to db Test
> db.Annotations.save({ _id: "http://fiit.sk/Anot2", IsDeleted: false
})
> db.Annotations.find().forEach(printjson)
{ "_id" : "http://fiit.sk/Anot1", "IsDeleted" : true}
{ "_id" : "http://fiit.sk/Anot2", "IsDeleted" : false }
> annot = db.Annotations.findOne({_id: "http://fiit.sk/Anot2"})
{ "_id" : "http://fiit.sk/Anot1", "IsDeleted" : false }
> annot.IsDeleted = true
true
> db.Annotations.save(annot)
> db.Annotations.find().forEach(printjson)
{ "_id" : "http://fiit.sk/Anot1", "IsDeleted" : true}
{ "_id" : "http://fiit.sk/Anot2", "IsDeleted" : true}

Weitere ähnliche Inhalte

Ähnlich wie MongoDB: Repository for Web-scale metadata

Matúš Jančík: Programuj rýchlejšie, meraj presnejšie
Matúš Jančík: Programuj rýchlejšie, meraj presnejšieMatúš Jančík: Programuj rýchlejšie, meraj presnejšie
Matúš Jančík: Programuj rýchlejšie, meraj presnejšieMichal Chabada
 
Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Jano Suchal
 
Require.JS & Backbone.JS
Require.JS & Backbone.JSRequire.JS & Backbone.JS
Require.JS & Backbone.JSsrigi
 
Martin Strýček - Ako začať s MongoDB
Martin Strýček - Ako začať s MongoDBMartin Strýček - Ako začať s MongoDB
Martin Strýček - Ako začať s MongoDBwebelement
 
Konference archivy muzea_praha_2010-custodea
Konference archivy muzea_praha_2010-custodeaKonference archivy muzea_praha_2010-custodea
Konference archivy muzea_praha_2010-custodeahanzlik99
 
Konference Archivy, knihovny, muzea v digitálním světě 2010, Praha, 1.12.2010
Konference Archivy, knihovny, muzea v digitálním světě 2010, Praha, 1.12.2010Konference Archivy, knihovny, muzea v digitálním světě 2010, Praha, 1.12.2010
Konference Archivy, knihovny, muzea v digitálním světě 2010, Praha, 1.12.2010Ivan Hanzlík
 
Prezentácia: Ruby on RAils
Prezentácia: Ruby on RAilsPrezentácia: Ruby on RAils
Prezentácia: Ruby on RAilsguest3604661
 

Ähnlich wie MongoDB: Repository for Web-scale metadata (11)

Android libraries
Android librariesAndroid libraries
Android libraries
 
Matúš Jančík: Programuj rýchlejšie, meraj presnejšie
Matúš Jančík: Programuj rýchlejšie, meraj presnejšieMatúš Jančík: Programuj rýchlejšie, meraj presnejšie
Matúš Jančík: Programuj rýchlejšie, meraj presnejšie
 
Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?
 
Require.JS & Backbone.JS
Require.JS & Backbone.JSRequire.JS & Backbone.JS
Require.JS & Backbone.JS
 
Seminar K Datasetom
Seminar K DatasetomSeminar K Datasetom
Seminar K Datasetom
 
Martin Strýček - Ako začať s MongoDB
Martin Strýček - Ako začať s MongoDBMartin Strýček - Ako začať s MongoDB
Martin Strýček - Ako začať s MongoDB
 
Ro r
Ro rRo r
Ro r
 
Konference archivy muzea_praha_2010-custodea
Konference archivy muzea_praha_2010-custodeaKonference archivy muzea_praha_2010-custodea
Konference archivy muzea_praha_2010-custodea
 
Konference Archivy, knihovny, muzea v digitálním světě 2010, Praha, 1.12.2010
Konference Archivy, knihovny, muzea v digitálním světě 2010, Praha, 1.12.2010Konference Archivy, knihovny, muzea v digitálním světě 2010, Praha, 1.12.2010
Konference Archivy, knihovny, muzea v digitálním světě 2010, Praha, 1.12.2010
 
Prezentácia: Ruby on RAils
Prezentácia: Ruby on RAilsPrezentácia: Ruby on RAils
Prezentácia: Ruby on RAils
 
Cv_sk
Cv_skCv_sk
Cv_sk
 

Mehr von tkramar

Lessons learned from SearchD development
Lessons learned from SearchD developmentLessons learned from SearchD development
Lessons learned from SearchD developmenttkramar
 
Learning to rank fulltext results from clicks
Learning to rank fulltext results from clicksLearning to rank fulltext results from clicks
Learning to rank fulltext results from clickstkramar
 
Live Streaming & Server Sent Events
Live Streaming & Server Sent EventsLive Streaming & Server Sent Events
Live Streaming & Server Sent Eventstkramar
 
Unix is my IDE
Unix is my IDEUnix is my IDE
Unix is my IDEtkramar
 
Optimising Web Application Frontend
Optimising Web Application FrontendOptimising Web Application Frontend
Optimising Web Application Frontendtkramar
 
CouchDB: replicated data store for distributed proxy server
CouchDB: replicated data store for distributed proxy serverCouchDB: replicated data store for distributed proxy server
CouchDB: replicated data store for distributed proxy servertkramar
 
Ruby vim
Ruby vimRuby vim
Ruby vimtkramar
 

Mehr von tkramar (7)

Lessons learned from SearchD development
Lessons learned from SearchD developmentLessons learned from SearchD development
Lessons learned from SearchD development
 
Learning to rank fulltext results from clicks
Learning to rank fulltext results from clicksLearning to rank fulltext results from clicks
Learning to rank fulltext results from clicks
 
Live Streaming & Server Sent Events
Live Streaming & Server Sent EventsLive Streaming & Server Sent Events
Live Streaming & Server Sent Events
 
Unix is my IDE
Unix is my IDEUnix is my IDE
Unix is my IDE
 
Optimising Web Application Frontend
Optimising Web Application FrontendOptimising Web Application Frontend
Optimising Web Application Frontend
 
CouchDB: replicated data store for distributed proxy server
CouchDB: replicated data store for distributed proxy serverCouchDB: replicated data store for distributed proxy server
CouchDB: replicated data store for distributed proxy server
 
Ruby vim
Ruby vimRuby vim
Ruby vim
 

MongoDB: Repository for Web-scale metadata

  • 2. Problémová oblasť  Anotácie (metadáta) na Webe  Web – veľký => Veľa metadát  Distribuované úložisko  Distribuované spracovanie dát  „Voľná“ štruktúra dát  Nevhodná relačná algebra  „Štandard“: Model Open Annotation (openannotation.org)  RDF  Dopytovanie prostredníctvom SPARQL
  • 3. Očakávané štandardné použitie  Uloženie anotácie  Aktualizácia anotácie  Získanie konkrétnej anotácie  Získanie histórie anotácie (historickej verzie)  Získanie anotácií z dokumentu  Dopytovanie nad anotáciami prostredníctvom SPARQL – kompatibilita s Open Annotation
  • 4. Zvažované DBMS  Bigdata  Natívne RDF úložisko  Výkonné voči iným RDF DBMS, reálne stále pomalé  Casandra  Dopytovanie po stĺpcoch  Apache Hadoop - MapReduce  ChouchDB  JSON  MapReduce  MongoDB  BSON  MapReduce
  • 5. Realizácia  Kolekcia: Annotations  Objekty anotácií - ľubovoľná štruktúra dát s URI identifikátorom, spĺňajúca náležitosti modelu OA  Rýchly prístup ku konktrérnej anotácií  Pomalé získanie zoznamu anotácií dokumentu  Kolekcia: Dokumenty  Objekty s fixnou štruktúrou – (ID, URI dokumentu – indexované, URI anotácie, platnosť anotácie)  Rýchle získanie zoznamu anotácií  SPARQL – MapReduce s Finalize
  • 6. Bigdata vs. MongoDB 600 550 500 450 400 350 300 250 200 150 100 50 0 1 21 41 61 81 101 121 141 161 181 201 221 241 261 281 301 321 Load Annotations Retrieve One Annotation Retrieve Uri List Retrieve Object List Execute SPARQL Query
  • 7. Práca s MongoDB  Drivare pre jazyky  Priama podpora: C, C++, Erlang, Haskell, Java, Javascript, .NET (C# F#, PowerShell, etc), Perl, PHP, Python, Ruby, Scala  Podpora komunity: ActionScript3, Clojure, ColdFusion, D, Delphi, Entity, Factor, Go, Groovy, Lisp, Lua, MatLab, node.js, Objective C, Opa, PowerShell, Prolog, R, REST, Racket, Smalltalk  REST addon  JavaScript konzola
  • 8. C# using MongoDB.Bson; class Annotation using MongoDB.Driver; { using MongoDB.Bson.Serialization; [BsonId] using MongoDB.Driver.Builders; public string Uri { get; set; } MongoServer server = MongoServer.Create(connectionString); public DateTime Created MongoDatabase database = { get; set; } server.GetDatabase(databaseName); var annotations = public bool IsDeleted database.GetCollection<Annotation> { get; set; } (collectionName); Annotation annotation = public ITarget[] HasTarget new Annotation() {…}; { get; set; } annotations.Insert(annotation); ... annotation = } annotations.FindOneById(uri);
  • 9. JavaScript Console > use Test switched to db Test > db.Annotations.save({ _id: "http://fiit.sk/Anot2", IsDeleted: false }) > db.Annotations.find().forEach(printjson) { "_id" : "http://fiit.sk/Anot1", "IsDeleted" : true} { "_id" : "http://fiit.sk/Anot2", "IsDeleted" : false } > annot = db.Annotations.findOne({_id: "http://fiit.sk/Anot2"}) { "_id" : "http://fiit.sk/Anot1", "IsDeleted" : false } > annot.IsDeleted = true true > db.Annotations.save(annot) > db.Annotations.find().forEach(printjson) { "_id" : "http://fiit.sk/Anot1", "IsDeleted" : true} { "_id" : "http://fiit.sk/Anot2", "IsDeleted" : true}