Versionsverwaltung

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Versionsverwaltung

Beitrag von Zudomon »

Hi!

Als Freund von binären Streams beim speichern und laden von Dateien würde ich nun gerne eine Art Versionsverwaltung einbauen. Ich frage mich allerdings, wie...

Man könnte ein Fileformat v1, dann v2 usw. machen. Allerdings wäre mir das in meinem Fall zu aufwendig. Da es sich hier um viele verschiedene Dateitypen handelt und sich Änderungen meist darauf beschränken, ein Datentyp zu ändern oder mal eine Property hinzuzufügen/zu entfernen, wäre es angebrachter das modularer zu machen. Perfekt wäre ein System, bei dem man direkt eine Datei abspeichern kann. Ändert sich nun etwas, sollte versucht werden, die Daten so umzuwandeln, wie es nötig ist. Klappt dies nicht oder sind einfach keine Daten vorhanden, so sollen die Daten ebend undefiniert sein und sie werden dann halt beim editieren neu gesetzt.

Soweit meine ersten Gedanken dazu. Allerdings will ich keinesfalls XML oder ähnlich okulte Dinge. Nur binär tanzt der Bär im Rechner hin und her! :D

Gruß
Zudo
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Versionsverwaltung

Beitrag von Aramis »

Blenders Dateiformat implementiert in etwas so ein System, die Dateien sind vorwaerts- wie rueckwaertskompatibel. Zum Einsatz kommt ein Meta-Compiler, der die (C-) Definition der BLEND-Datenstrukturen in eine gewaltige Tabelle umsetzt, die dann beim Laden mit ihrem Gegenstueck am Anfang der zu ladenden Datei zusammengefuehrt wird.

http://www.blender.org/development/arch ... s-on-sdna/
http://www.blender.org/development/arch ... le-format/

Nach mehreren Jahren evolutionaerer Entwicklung ist es das Dateiformat dann das reinste Chaos geworden. Die Moeglichkeit Altlasten beliebig lange belassen zu koennen wird ausgiebig genutzt, so wie ich das sehe.
Benutzeravatar
Lynxeye
Establishment
Beiträge: 145
Registriert: 27.02.2009, 16:50
Echter Name: Lucas
Wohnort: Hildesheim
Kontaktdaten:

Re: Versionsverwaltung

Beitrag von Lynxeye »

Ich bin inzwischen ein Fan von XML, auch wenn es anfangs sehr aufgebläht aussieht. Allerdings spricht ja nichts dagegen binäres XML einzusetzen. Funktioniert beim Matroska Containerformat ja auch sehr gut.
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Versionsverwaltung

Beitrag von kimmi »

Mach doch einen Versionstag in den Datenheader. Zum Beispiel sowas:

Code: Alles auswählen

struct MyHeader
{
  int m_Version
  MyData m_Data;
};

struct MyData
{
  ...
  unsigned int m_DataSize;
};
Die DataSize beinhaltet die Größe einer Instanz von MyData. Die version sagt deinem Loader, welches Feaureset unterstützt wird. Die Größe hilft beim Auslesen, da die ja mit höheren Versionen anders sein kann. So hab ich zum Beispiel binäre Daten versioniert.

Gruß Kimmi
mikesc
Beiträge: 28
Registriert: 07.03.2009, 23:12
Wohnort: Augsburg
Kontaktdaten:

Re: Versionsverwaltung

Beitrag von mikesc »

Googles Procol Buffers passen perfekt zu deinen Anforderungen:
http://code.google.com/apis/protocolbuf ... rview.html
besonders http://code.google.com/apis/protocolbuf ... l#updating

Grüße
Michael
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Versionsverwaltung

Beitrag von Zudomon »

Vielen Dank für die vielen Antworten... die haben mich auf die richtige Fährte gebracht. Besonders die Google Protocol Buffers scheinen sehr brauchbar zu sein.

Da ich allerdings in Delphi programmiere und soweit ich das gesehen habe, die API da nicht benutzen kann, habe ich mir nun folgendes Lösung vorgenommen:
Ich versuche in den nächsten Tagen von meiner statischen Datenspeicherung weg zu kommen und das, was es zu speichern und laden gibt in modulare Blöcke aufteilen... jeder wird dann einfach eine GUID bekommen. Dann wird eine Datei ausgelesen, indem erstmal die GUID gelesen wird, welche wiederrum besagt, was genau für den Abschnitt zu tun ist. Vielleicht sollte vor der GUID noch die größe des Blocks stehen, damit dieser übersprungen werden kann, wenn die Handhabeung für diesen Block entfernt wurde.
Antworten