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 »