Ich habe jetzt eine Reihe von Vorversuchen gemacht, um dem VCR.NET Recording Service durch den Einsatz der Microsoft SQL Server 4.0 Compact Edition (SqlCe) eine ordentliche Datenbank zu verpassen. Nach anfäglichen Erfolgen betrachte ich das jetzt nach dem Versuch, auch die Programmzeitschrift im SqlCe zu halten, als gescheitert. Konkret ist mein mir selbst gesetztes Zeitbudget erschöpft und ich werde die SqlCe Integration zurückfahren müssen – keine Ahnung, ob auf den Urzustand oder etwas anderes. Weitere Experimente zur Optimierung oder andere (freie) Datenbanken ausprobieren werde ich nicht machen, dazu ist mir die Zeit zu schade – funktional liegt ja die VCR.NET 4.0 Entwicklung schon zu lange auf Eis und die persistente Ablage sollte nur ein unbedeutender Nebenschauplatz sein.
Was hat mich denn so wirklich genervt? Am Anfang die Geschwindigkeit beim Anlegen von Datensätzen: eine Programmzeitschrift mit 20.000+ Einträge mit einer Rate von ca. 10 pro Sekunde (ich habe keinen sonderlich langsamen Rechner!) steht ausserhalb jeder Diskussion. Nun, das Problem war schnell gelöst: durch den Einsatz von Cursor und Record liegt man bei deutlich über 10.000 Operationen pro Sekunde. Da kam dann wieder Freude auf.
Häßlich wurde es dann wieder, als ich versucht habe, die Beschreibungen der Sendungen als Spalten zu definieren. Diese können (und sind oft) theoretisch recht lang werden. Also erst einmal als unbegrenzter (UNICODE) NTEXT: träge beim Suchen (LIKE), qualvoll langsam beim Auslesen. Ich habe dann in den sauren Apfel gebissen und mir gesagt, dass 4.000 Zeichen wohl auch reichen werden und bin zu NVARCHAR(4000) übergelaufen. Die Übertragungsgeschwindigkeit ist dann akzeptabel. Bei der Suche in der Programmzeitschrift sucht VCR.NET in der Voreinstellung über Name, Beschreibung und Kurzbeschreibung mit LIKE ‘%text%’ – Volltextsuche kann SqlCe ja nicht. Ist die Suche auf eine Spalte noch gerade so erträglich, ist es über drei Spalten schon sehr ruckelig.
Also einfach alle Spalten in eine redundante (unsichtbare) Spalte kombinieren und darin suchen. Tja, von der Geschwindigkeit her geht das gerade noch so (schenll ist anders), aber leider ist die Breite einer Tabellenzeile auf ca. 8.000 Bytes beschränkt: ich bekomme die aktuelle Programmzeitschrift von Astra 1 und 2 gar nicht erst eingespielt.
Ich habe mir jetzt nicht die Mühe gemacht herauszufinden, an welcher Stelle es genau knallt – könnte 3Sat sein, die haben ab und an mal wirklich ausführliche Beschreibungen. Obwohl ich durchaus noch Ideen habe, das teilweise in den Griff zu bekommen [ist ja auch so ausserhalb der Freizeit mein Job :-)] ist für mich der Punkt erreicht, an dem ich ganz klar sagen muss: jetzt ist VCR.NET Funktionalität mal wieder dran.
So, das muss erst mal reichen. Vielleicht melde ich mich dazu noch einmal, wenn ich eine angemessene Lösung implementiert habe.
Bis dahin viel Spaß
Jochen
[Zusatz] Back to the Roots – sämtliche SqlCe Erweiterungen wurden entfernt und es geht weiter wie bisher.