Wir sind aber nicht Twitter

  • Published on
    28-Aug-2014

  • View
    1.273

  • Download
    1

DESCRIPTION

Was alternative Datenbanken jenseits von Skalierung bieten. NoSQL Datenbanken bieten sich an, um hochskalierende Anwendungen auf Hunderten von Nodes zu realisieren. Stimmt. Das ist aber nicht alles. Nicht-relationale Datenbanken bieten jenseits von Performanz interessante Features, die man auch in Projekten gebrauchen kann, die nicht die Nutzerzahlen von Twitter und Facebook erreichen. Dieser Vortrag greift Aspekte wie Schemafreiheit, Multi-Model-Datemodellierung und "Database as application server" auf und zeigt, wie man diese sinnvoll in Projekten einsetzen kann und was dabei zu beachten ist.

Transcript

Wir sind aber nicht TwitterWas alternative Datenbanken jenseits von Skalierung bieten.Frank CellerDeveloper Week 2013Nrnbergwww.arangodb.org (c) f.celler@triagens.deMittwoch, 26. Juni 13 Die NoSQL Bewegungwww.arangodb.org (c) f.celler@triagens.deMittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.dehttp://www.strozzi.it/cgi-bin/CSA/tw7/I/en_US/nosql/Home%20PageNoSQLA Relational Database Management SystemNoSQL is a fast, portable, relational database management system without arbitrary limits,(other than memory and processor speed) that runs under, and interacts with, the UNIX1Operating System. It uses the "Operator-Stream Paradigm" described in "Unix Review", March,1991, page 24, entitled "A 4GL Language". There are a number of "operators" that eachperform a unique function on the data. The "stream" is supplied by the UNIX Input/Outputredirection mechanism. Therefore each operator processes some data and then passes it along tothe next operator via the UNIX pipe function. This is very efcient as UNIX pipes areimplemented in memory. NoSQL is compliant with the "Relational Model".Carlo Strozzi, 1998Mittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.deTrafc,Trafc,TrafcMittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.dehttp://www.allthingsdistributed.com/2007/10/amazons_dynamo.htmlDynamo: Amazons Highly Available Key-value StoreGiuseppe DeCandia, Deniz Hastorun, Madan Jampani, Gunavardhan Kakulapati, Avinash Lakshman, Alex Pilchin, Swaminathan Sivasubramanian, Peter Vosshall and Werner VogelsAmazon.comAbstractReliability at massive scale is one of the biggest challenges we face at Amazon.com, one of thelargest e-commerce operations in the world; even the slightest outage has signicant nancialconsequences and impacts customer trust. The Amazon.com platform, which provides servicesfor many web sites worldwide, is implemented on top of an infrastructure of tens of thousands ofservers and network components located in many datacenters around the world. At this scale,small and large components fail continuously and the way persistent state is managed in the faceof these failures drives the reliability and scalability of the software systems.This paper presents the design and implementation of Dynamo, a highly available key-valuestorage system that some of Amazons core services use to provide an always-on experience.To achieve this level of availability, Dynamo sacrices consistency under certain failurescenarios. It makes extensive use of object versioning and application-assisted conict resolutionin a manner that provides a novel interface for developers to use.Werner Vogels, 2007Mittwoch, 26. Juni 13 CAPwww.arangodb.org (c) f.celler@triagens.deACIDBASEWas ist neu?Mittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.deNOSQL meetupThursday, June 11, 2009 from 10:00 AM to 5:00 PM (PDT)San Francisco, CAIntroductionThis meetup is about "open source, distributed, non relational databases".Have you run into limitations with traditional relational databases? Dont mind trading aquery language for scalability? Or perhaps you just like shiny new things to try out?Either way this meetup is for you.Join us in guring out why these newfangled Dynamo clones and BigTables have becomeso popular lately. We have gathered presenters from the most interesting projects aroundto give us all an introduction to the eld.http://nosql.eventbrite.com/Mittwoch, 26. Juni 13 Dokument Datenbankenwww.arangodb.org (c) f.celler@triagens.deMittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.deWarum NoSQL?Reasons to use NoSQL databasesThis is interesting. If you group together the sections that deal with ease of applicationdevelopment which are simpler data model, schema less and rapid development then these come to a total of 17. This far outweighs any other result. It would seem thatmost people use NoSQL databases because theyre easier to develop application on.This likely accounts for why you come across Open Source NoSQL databases on theweb, but not in large organisations doing serious work for a large and complex systemease of development is not a primary concern. These organisations are instead concernedwith doing things properly i.e. Enterprise class solutions.Adam Fowler, 2013http://adamfowlerml.wordpress.com/2013/01/04/why-use-a-nosql-database-and-why-not/Mittwoch, 26. Juni 13 relationales Gebot: Daten sollennormalisiert gespeichert werden Redundanzen ausen Konsistenz und Integritt der Datenerhhenwww.arangodb.org (c) f.celler@triagens.deRDBMS NormalisierungMittwoch, 26. Juni 13 Eine Person hat Vor und Zuname eine oder mehrere Adressen, Email-Adressen,Telefonnummern Liste fr Hobbies, Skills,Tagswww.arangodb.org (c) f.celler@triagens.deRDBMS NormalisierungMittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.dePersonPersonPersonAddressAddressAddressHobbyHobbyHobbyemailemailemailn-to-mn-to-mn-to-mn-to-mn-to-mn-to-mn-to-mn-to-mn-to-mRelationale WeltMittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.deRelationale Welt normalisierte Daten sind meist aufmehrere Tabellen verteilt zur Abfrage bentigt man dann Joins es knnen Beziehungen (references) undKonsistenzbedingungen (constraints)deniert werden diese werden von der DatenbankerzwungenMittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.de{ name: { rst: Frank, last: Celler },address: { home: { street: ..., city: ... } },email: { work: frank@celler.de },hobbies: [ C++, MRuby, JavaScript ] }Aggregate aka DokumentMittwoch, 26. Juni 13 Dokument einfache Key /Value Paare Listen und Unterobjekte vielfach als JSON Schema-Freiheit keine objektrelationale Unvertrglichkeitwww.arangodb.org (c) f.celler@triagens.deDokument DatenbankenMittwoch, 26. Juni 13 es ist "erwnscht", ein Objekt alszusammengehriges Aggregat zu speichern(keine Aufteilung der Objekteigenschaftenauf verschiedene "Tabellen" etc.) durch die Aggregatorientierung ist dasLesen und Speichern von komplettenObjekten einfach und schnellwww.arangodb.org (c) f.celler@triagens.deDokument DatenbankenMittwoch, 26. Juni 13 Schema ist in gespeicherten Daten inhrentvorhanden verschiedeneVersionen eines "Schemas"knnen parallel existieren: { name: "..." } { name: { rst: "...", last: "..." } } { rstName: "...", lastName: "..." }www.arangodb.org (c) f.celler@triagens.deSchema-FreiheitMittwoch, 26. Juni 13 kein Migrationszwang: man kann selbstentscheiden, ob (und wann) "alte" Datenmigriert werden wenn keine Migration alter Daten erfolgt,muss die Applikation mit verschiedenenVersionen umgehen knnen mehr Kontrolle = mehrVerantwortungwww.arangodb.org (c) f.celler@triagens.deSchema-FreiheitMittwoch, 26. Juni 13 auf die Attribute von Dokumenten kannauch einzeln zugegriffen werden teilweise knnen auch Indizes auf dieeinzelnen Attribute angelegt werden zur Zeit keine einheitliche Abfragesprache,noch nicht einmal einheitliches Paradigma selten Joins notwendigwww.arangodb.org (c) f.celler@triagens.deAbfragenMittwoch, 26. Juni 13 Graph Datenbankenwww.arangodb.org (c) f.celler@triagens.deMittwoch, 26. Juni 13 (c) Geek & PokeMittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.deGraph Datenbanken ein "Graph" ist die Gesamtheit von Objekten (Knoten, auch "vertices") sowie Beziehungen (Kanten, auch "edges")Mittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.deType: inproceedingTitle: Finite Size EffectsType: proceedingTitle: Neural ModelingType: personName:Anthony C. C.CoolenLabel: writtenLabel: publishedPages: 99-120Type: personName: Snchez-AndrsLabel: editedJust DocumentsGraph DatenbankenMittwoch, 26. Juni 13 Hierarchien, Klassikationen (Bume) soziale Beziehungen (Netzwerke) geographische Daten (Navigation, Routen) die Objekte selbst und die direkten undindirekten Beziehungen ("Pfade") sindabfragbarwww.arangodb.org (c) f.celler@triagens.deEinsatzmglichkeitenMittwoch, 26. Juni 13 Graph-Abfragen sind oft komplex Traversals: in der Datenbank ausgefhrteProgramme Gremlin (Datenbank-bergreifendeTraversal-Skriptsprache) Datenbank-eigene Abfragemglichkeiten(z.B.Abfragesprache "Cypher" in Neo4j)www.arangodb.org (c) f.celler@triagens.deAbfragenMittwoch, 26. Juni 13 Multi-Modell Datenbankenwww.arangodb.org (c) f.celler@triagens.deMittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.de Knoten und Kanten sind Dokumente Abfragen wie analog Dokument-Datenbanken Range, Geo, Full-Text Beziehung als Graph Traversieren des GraphenMulti-Modell DatenbankenMittwoch, 26. Juni 13 ArangoDB.explain()www.arangodb.org (c) f.celler@triagens.de{"type": "NoSQL database","model": [ "document", "graph", "key-value" ],"openSource": true,"license: "apache","version": 1.3,"builtWith": [ "C", "C++", "js" ],"Javascript": [ "client side", "server side" ],"uses": [ "V8" ]}Mittwoch, 26. Juni 13 NoSQL Landschaftwww.arangodb.org (c) f.celler@triagens.deMittwoch, 26. Juni 13 in den letzten Jahren sind viele neue, nicht-relationale Datenbanken entstanden diese lsen einige der genannten Probleme(Skalierung, Schemas, dynamische Daten,impedance mismatch) teilweise durch weniger Zusicherungen undGarantien (a.k.a. Delegation von Aufgaben andie Applikation)www.arangodb.org (c) f.celler@triagens.deNoSQL DatenbankenMittwoch, 26. Juni 13 (c) 451 Research 31Mittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.de 32Analytic Processing DBsTransaction Processing DBsManaging the evolving state of an IT systemMap/ReduceGraphsExtensibilityKey/ValueColumn-StoresComplexQueriesStructuredDataMassivelyDistributedDocumentsMittwoch, 26. Juni 13 JavaScript in der Datenbankwww.arangodb.org (c) f.celler@triagens.deMittwoch, 26. Juni 13 JavaScript Everywhere im Browser Application-Layer (Node.JS) Datenbankwww.arangodb.org (c) f.celler@triagens.deMittwoch, 26. Juni 13 JavaScript in a Database MVC im Browser und/oder NODE.JS Script-Sprache in der Datenbank Transaktionen als Functionen Graph-Traversal no-backend, just APIwww.arangodb.org (c) f.celler@triagens.deMittwoch, 26. Juni 13 db._create("accounts");db.accounts.save({ _key: "john", amount: 423 });db.accounts.save({ _key: "fred", amount: 197 });db._executeTransaction({collections: {write: "accounts"},params: {user1: "fred",user2: "john",amount: 10},action: function (params) {var db = require("internal").db;var account1 = db.accounts.document(params[user1]);var account2 = db.accounts.document(params[user2]);var amount = params[amount];if (account1.amount < amount) {throw "account of user " + user1 + " does not have enough money!";}db.accounts.update(account1, { amount : account1.amount - amount });db.accounts.update(account2, { amount : account2.amount + amount });/* will commit the transaction and return the value true */return true;}});www.arangodb.org (c) f.celler@triagens.deTransactionsMittwoch, 26. Juni 13 db._executeTransaction({collections: {write: "accounts"},params: {user1: "fred",user2: "john",amount: 10},action: function (params) {var db = require("internal").db;var account1 = db.accounts.document(params[user1]);var account2 = db.accounts.document(params[user2]);var amount = params[amount];if (account1.amount < amount) {throw "account of user " + user1 + " does not have enough money!";}db.accounts.update(account1, { amount : account1.amount - amount });db.accounts.update(account2, { amount : account2.amount + amount });www.arangodb.org (c) f.celler@triagens.deTransactionsMittwoch, 26. Juni 13 function traverse (graph, start, depth, maxlen) {var config = {datasource: traversal.collectionDatasourceFactory(graph._edges),strategy: Traverser.BREADTH_FIRST,expander: traversal.anyExpander,filter: traversal.maxDepthFilter,maxDepth: depth,uniqueness: { edges: Traverser.UNIQUE_GLOBAL, vertices: Traverser.UNIQUE_NONE },visitor: coauthorVisitor(maxlen)};var traverser = new Traverser(config);var result = { positions: {}, vertices: [], links: [], minYear: 0, maxYear: 0 };var first = graph._vertices.firstExample({ name: start });if (first !== null) {traverser.traverse(result, first);}return {start: start,depth: depth,minYear: result.minYear,maxYear: result.maxYear,vertices: result.vertices,links: result.links };}www.arangodb.org (c) f.celler@triagens.deGraph TraversalMittwoch, 26. Juni 13 function traverse (graph, start, depth, maxlen) {var config = {datasource: traversal.collectionDatasourceFactory(graph._edges),strategy: Traverser.BREADTH_FIRST,expander: traversal.anyExpander,filter: traversal.maxDepthFilter,maxDepth: depth,uniqueness: { edges: Traverser.UNIQUE_GLOBAL,vertices: Traverser.UNIQUE_NONE },visitor: coauthorVisitor(maxlen)};www.arangodb.org (c) f.celler@triagens.deGraph TraversalMittwoch, 26. Juni 13 www.arangodb.org (c) f.celler@triagens.deNo-BackendMittwoch, 26. Juni 13 To Be Continued Fork me on github Google Group:ArangoDB Twitter: @fceller & @arangodb www.arangodb.orgwww.arangodb.org (c) f.celler@triagens.deStay in Touch:Mittwoch, 26. Juni 13

Recommended

View more >