Archive for the “StupidDB” Category

Seit ein paar Monaten wird der Begriff NoSQL (Not only SQL) immer häufiger verwendet. Wir sind mit unserer schemalosen Datenbank StupidDB vor eineinhalb Jahren bereits auf diesen Zug aufgesprungen und jetzt hat sie einen Überbegriff bekommen: auch StupidDB ist NoSQL!

Auf dem BarCamp in Nürnberg war NoSQL auch ein Thema und Jonathan Weiss hat in seiner Session gut dargestellt, dass relationale Datenbanken nicht immer die Lösung für alle Probleme sind. NoSQL Datenbanken speichern meist dokumentenorientiert und sind dadurch nicht an ein festes Schema gebunden. Relationale Datenbanken haben ein fixes Schema und erlauben dynamische Abfragen der Daten, bei NoSQL ist dies umgekehrt. Weitere Informationen zu NoSQL bei Wikipedia.

Im März Heft der dotnetpro stelle ich ausführlich den Einsatz von StupidDB vor. Das Heft ist am 18.2.2010 erschienen und sollte jetzt in jedem gut sortierten Kiosk erhältlich sein.

Für alle, die sich Heft nicht griffbereit haben, ich habe bereits Mitte letzten Jahres in einem Blogpost den Einsatz von StupidDB beschrieben. Hier sieht man zumindest die Grundzüge der StupidDB. Das aktuelle dotnetpro Heft lohnt sich jedoch trotzdem, da hier noch weitere Artikel zum Thema NoSQL zu finden sind. Unter anderem das Lounge Repository von Ralf Westphal und auch CouchDB.

Als neuester Vertreter in der NoSQL Bewegung gilt MongoDB. Eine Opensource Implementierung die nun auch Sourceforge einsetzt. Auch dafür gibt es schon Blogposts und Tests mit .NET.

Zudem hat Ayende Rahien im Herbst letzten Jahres auch seine Rhino Divan DB vorgestellt. Interessant klingt auch Object Lounge.

Es scheint also ein Bedarf an alternativer Datenpersistenz zu bestehen, wird sich zeigen wohin dieses Jahr die Reise bei NoSQL geht.

Wer sich den aktuellen Code einmal ansehen möchte, kann dies gerne unter folgendem Link ansehen:
https://stupiddb.svn.sourceforge.net/svnroot/stupiddb/trunk

Als DLL haben wir StupidDB auf www.aztec-project.org bereitgestellt.

Verwendet ihr schon NoSQL?

kick it on dotnet-kicks.de

Comments 8 Comments »


.NET Open Space vom 17.10. bis 18.10.2009 in Leipzig

Das .NET Open Space in Leipzig ging vergangenes Wochenende nun bereits in die erste Wiederholung und das Konzept “Open Space” scheint sich immer weiter zu verbreiten. Auch das Barcamp in München am gleichen Wochenende war als “Open Space” organisiert.

Der Besuch in Leipzig ist in diesem Jahr schon der zweite .NET Open Space für uns. Auch diesmal war der Erkenntnisgewinn riesig, zumal man auch wirklich nette Leute aus ganz Deutschland trifft und oft merkt, die anderen Kochen auch nur mit Wasser und haben die gleichen Probleme.

Das Session-Highlight aus meiner Sicht war das Coding Dojo, in dieser Session waren nahezu alle Teilnehmer. Bearbeitet wurde das KataPotter und wie zu erwarten war, stand nach gut einer Stunde nicht einmal ansatzweise ein brauchbarer Code-Teil. Sinn der Session war jedoch gar nicht wirklich die Programmierarbeit sondern die Kommunikation der Teilnehmer, was sehr aufschlussreich war. Selbst nach der Session wurde überall weiter über das Kata diskutiert.

In den Pausen des Open Spaces wurde auch über das Lounge Repository von Ralf und unsere StupidDB gesprochen, wie sich zeigt ist dafür Interesse und Bedarf vorhanden. Eine unsere Tasks die wir aus dem Open Space mitgenommen haben ist daher mehr über die StupidDB zu schreiben, das Konzept genauer darzulegen und Einsatzbereiche genauer vorzustellen. Auch Democode könnte sicher vielen helfen.

Comments 1 Comment »

Angeregt durch die Diskussion auf dem Open-Spaces zum Thema schemalose Datenbanken, werden wir heute bereits die Vorabversion unserer StupidDB als open-source releasen.

Die StupidDB entstand bei uns aus der Notwendigkeit, immer wieder Objekte und Files schnell und einfach zu speichern, dies serverlos und trotzdem skalierbar und hochverfügbar vorzuhalten. Die StupidDB lässt sich am besten wie folgt beschreiben:

StupidDB ist ein einfaches Objektspeicherungs-Framework auf dem Filesystem. Vergleichbar mit dem WebCache kann man in der StupidDB jegliches Objekt ablegen, welches kosteneffizient auf dem Filesystem gespeichert wird. Geladen werden können Objekte und Binärdaten mit einem eindeutigen Key und einer Partition. Den echten Speicherort auf der Festplatte ermittelt StupidDB selbst. Durch Replikation des Filesystems z.B. per Windows-DFS ist zudem eine einfache Hochverfügbarkeit und Skalierbarkeit der Datenbasis herzustellen.

Angeregt durch einen Blogeintrag von tilllate.com letztes Jahr, entstand bereits vor einem Jahr die erste Version von StupidDB, welches bis zum Blogeintrag nur aus einem Konzept bestand. Leo Büttiker hat zwar ein leicht anderes Konzept als unsere Implementierung, in den Kernpunkten ähnelt sich aber das Design. StupidDB bekam durch diesen Blogpost damals jedoch seinen Namen.

Für folgende Anwendungsszenarien sehen wir StupidDB als geeignet:

  • Userdaten wie Fotos und Mediadaten, die eine Datenbank nur unnötig aufblähen
  • temporäre Daten
  • Statusdaten
  • Versionierung von Daten

Als Vorteile gegenüber z.B. MogileFS, CouchDB zählt für uns vor allem, dass kein zentraler Server für die Datenbank benötigt wird, sondern nur ein Share im Netz. Die Implementierung ist dadurch enorm vereinfacht. Mit weiteren Windows-Board-Mitteln kann man danach das ganze System um Hochverfügbarkeit und Skalierbarkeit einfach ausbauen.

Die Nutzung selbst ist denkbar einfach. Folgendes Mitarbeiter-Objekt möchte ich speichern.

65 public class Mitarbeiter

66 {

67 public int Id { get; set; }

68 public string Name { get; set; }

69 public string Vorname { get; set; }

70 public string Ort { get; set; }

71 public string Plz { get; set; }

72

73 public string VollerName

74 {

75 get { return string.Format(“{0} {1}”, Vorname, Name); }

76 }

77 }

Dazu nutzt man die Put-Methode der StupidDB.

20 IStupidDB stupidDB = new StupidDB(“test”);

21 Mitarbeiter mitarbeiter = new Mitarbeiter

22 {

23 Id = 1,

24 Name = “Christian”,

25 Vorname = “Thomas”,

26 Ort = “Rosenheim”,

27 Plz = “83026”

28 };

29 stupidDB.Put( “TestPartition”, “EinMitarbeiter”, mitarbeiter );

Um das gleiche Objekt wieder zu lesen, nutzt man mal eine Get Methode. Die Parameter sind Partition und Key:

32 Mitarbeiter mitarbeiterAusgelesen =

33 (Mitarbeiter)stupidDB.GetObject(

34 “TestPartition”,

35 “EinMitarbeiter”,

36 typeof(Mitarbeiter)

37 );

38 if (mitarbeiterAusgelesen != null)

39 {

40 Console.WriteLine(“Name des Mitarbeiters: {0}”,

41 mitarbeiterAusgelesen.VollerName);

42 }

Die StupidDB selbst wird über die app.config definiert.

3 <configuration>

4 <configSections>

5 <section name=stupidDB type=Aztec.StupidDB.DBConfigCollection, Aztec.StupidDB, Version=1.0.0.0, Culture=neutral allowLocation=true allowDefinition=Everywhere/>

6 </configSections>

7 <stupidDB>

8 <DB name=test root=temp\test tiefe=3 versionierung=false />

9 </stupidDB>

10 </configuration>

Wer sich den aktuellen Code einmal ansehen möchte, kann dies gerne unter folgendem Link ansehen:
https://stupiddb.svn.sourceforge.net/svnroot/stupiddb/trunk

kick it on dotnet-kicks.de

Comments 7 Comments »