2010-04-05 6 views

Antwort

26

Cache ist ein einzigartiges Tier, je nachdem, wie Sie es verwenden, dann könnte es als No-SQL-Datenbank beschrieben, ein RDBMS, oder ein Objekt orientierte Datenbank. Natürlich ist es nicht alles für alle Menschen, also muss man wissen, auf welche Art und Weise es ist.

Es ist alles auf einer vor-relationalen prozeduralen Sprache namens MUMPS (schreckliche Marketing-Namen, die schrecklich für Googeln ist auch, so dass sie jetzt nur Cache, die nur schrecklich für Googeln ist) gebaut. Diese Sprache enthält Operationen zum persistenten Speichern von Daten als native Befehle, sodass die Persistenz-Engine optimiert werden kann, ohne den Anwendungscode zu beeinträchtigen.

Diese Sprache hat einen Sammlertyp, ein Schlüssel/Wert-Verzeichnis mit 0 oder mehr sortierten Schlüsseln und einen Datentyp, der Operatoren für sehnige Dinge und andere für zahlreiche Dinge hat. Alle Schlüssel und Werte sind Instanzen dieses Datentyps.

Dies ist eine lange Zeit gewesen, und Anwendungen, die Jahrzehnte alt darüber geschrieben sind, laufen immer noch.

Diese Sprache ist älter als das erste RDBMS, aber spätere Implementierer der Sprache haben RDBMS-Unterstützung hinzugefügt. Cache kompiliert SQL (statisch oder dynamisch) in eine modernere Version von MUMPS, die dann die Speicher-Engine steuert. Wenn das komisch klingt, ist es nicht wirklich - jedes RDBMS kompiliert oder interpretiert SQL in Richtungen für seine Speicher-Engine.

Cache hat sich zu einer objektorientierten Sprache entwickelt (wie viele andere Sprachen im Laufe der Zeit), was bedeutet, dass es jetzt 2 Datentypen gibt, die ursprüngliche und den Objekttyp. Objekte können nicht direkt als Schlüssel oder Werte auf der Festplatte gespeichert werden, sondern können Persistenzmethoden erben oder implementieren.

So können Benutzer, die Cache verwenden, objektorientierten Code, SQL oder prozeduralen Code verwenden oder sie kombinieren, wie sie möchten.

Was sind die Vor- und Nachteile?

Für Leute, die Legacy-MUMPS-Anwendungen ausführen, haben sie ziemlich keine Wahl, also werde ich mich auf alle anderen konzentrieren.

Ein großer Nachteil ist, dass es einen kleinen Marktanteil hat (verglichen mit anderen RDBMS, obwohl es mit anderen Produkten verglichen werden könnte) und im selben Preis wie ein kommerzielles RDBMS (obwohl es wahrscheinlich viel einfacher ist) ein individuelles Angebot für einen bestimmten besonderen Gebrauch davon ausarbeiten), also muss es einen zwingenden Grund geben, es zu kaufen.

Auch der kleine Marktanteil bedeutet einen kleineren Markt für Entwickler. Aufgrund der unterschiedlichen Verwendungsmöglichkeiten sind nicht alle Cache-Entwickler für alle Projekte geeignet - jemand, der in den letzten 20 Jahren eine ältere Anwendung (von vor der strukturierten Programmierung) beibehalten hat, ist möglicherweise nicht sehr gut in der Lage, Cache für objektorientiertes Web zu verwenden Anwendungen.

Ein weiteres Problem ist, dass es so ziemlich keine Code-Bibliotheken außerhalb dessen gibt, was Intersystems (der Hersteller) liefert, und diese können unmöglich mit etwas wie .NET oder Java in der Größe konkurrieren.

Ein großer Vorteil ist, dass Cache-Objekt-Skript (moderne MUMPS-Sprache) viel mehr Sprache als Sie normalerweise in einer Datenbank erhalten. Dies ist von Vorteil, je mehr Geschäftslogik Sie in der Datenbank haben.

Eigentlich IMHO die meisten Vorteile von Cache kommen, wenn Sie es für Ihre Geschäftslogik verwenden. Die Kombination aus Datenbank und Geschäftslogik ist viel einfacher, leichter zu erreichen und führt nicht besonders zu langfristigen Wartungsproblemen, wenn die Umgebung dies unterstützt. Der Nachteil der Kombination von Datenbank und Geschäftslogik im Cache ist, dass die Portierung sehr schwierig sein wird und Ihre Geschäftslogik in der Regel in einer freien Sprache geschrieben ist und Sie keine Lizenz benötigen, um sie auszuführen. Hier befinden Sie sich im selben Boot, als wäre Ihre Geschäftslogik in TSQL, außer dass es noch schwieriger zu portieren ist.

Wenn Sie O.K. Aber viele Dinge sind schön. Kein ORM - kommerziell oder handkodiert. Das SQL ist in Code kompiliert, den Sie betrachten können (es wird so generiert, dass es auf Geschwindigkeit gegenüber Lesbarkeit optimiert ist und die Variablennamen können Dinge wie "T32" sein, aber es ist immer noch lesbar, wenn Sie müssen), sogar einen Schritt- oder Haltepunkt. Die Kosten für das Schreiben von SQL-Cursorn sind sehr niedrig. Sie können tatsächlich objektorientierten Code schreiben. Es wird interpretiert, daher ist es einfacher, sich schnell zu entwickeln. Wenn Sie Geschwindigkeit wollen, können Sie Transaktionen deaktivieren und keine SQL gehen.

Ich habe es auch sehr einfach zu verwalten gefunden. In den meisten meiner Erfahrungen gibt es keinen DBA - Sie brauchen einfach keinen.

+3

Ich bin mit dem letzten Kommentar nicht einverstanden, dass es keinen DBA gibt. Es wird normalerweise nur in die Rolle des Programmierteams subsumiert, das die allgemeinen DBA-Aufgaben erledigen muss. Innerhalb meiner Firma ist die DBA-Rolle im Wesentlichen aufgeteilt zwischen 3 Personen 1 Programme DB Änderungen, 1 implementiert diese Änderungen ein anderes pflegt Backup und Leistungsanpassungen. Da es nur wenige Leistungstools gibt, mussten wir Intersystems mehrmals für die DBA-Optimierungsaufgaben einstellen. Der Hauptnachteil ist, dass Cache-Programmierer selten sind und somit die Produktwartungskosten in dieser Hinsicht steigen. – Andrew

+0

@Andrew - Ich kann nur nach dem gehen, was ich erlebt oder gehört habe, und vielleicht ist das atypisch. Ich hatte noch nie so viel Arbeit, wie Sie bei Deployment, Backup und Performance-Anpassungen beschreiben. Aber ich stimme zu, dass es nur wenige Leistungswerkzeuge gibt und Programmierer selten sind. – psr

+1

Nun in gewisser Weise würde ich das gleiche über MySQL, MS SQL usw. sagen. Ich kenne viele Organisationen, die eine oder mehrere dieser Datenbanken ohne DBA laufen haben. Sie neigen dazu, die "Notwendigkeit" für einen DBA zu finden, basierend auf der Größe der Daten, an denen Sie arbeiten, der Häufigkeit der Aktualisierungen und ihrer relativen (und vielleicht noch wichtiger wahrgenommenen) Bedeutung für Ihr Unternehmen. Wir haben eine Cache-Datenbank und 2 Personen führen DBA-Aufgaben aus. Wir haben viele MySQL-Datenbanken, die nach dem Setup 0 DBA-Beteiligung hatten. – Andrew

4

Intersystem-Cache kann als objektorientierte Datenbank definiert werden.

Die Art, wie ich daran denke ist, dass es regelmäßige RDBMS-Datenbank mit Object Oriented Scripting Engine ist. Oracle hat Procs gespeichert, Cache hat Objektskript.

Wir migrieren zu Intersystems Cache, um die BI & Reporting-Tools zu nutzen. Ich bin noch nicht auf eine Situation gestoßen, die mit gespeicherten Prozeduren von MySQL oder Oracle noch nicht gelöst werden kann. Ich bevorzuge es, alles in SQL-Prozeduren zu schreiben, um zukünftige Migrationsprobleme zu vermeiden.

Personen mit starkem objektorientiertem Hintergrund bevorzugen möglicherweise die Verwendung von ObjectScript.

Nur falls Sie es nicht gesehen haben, hier ist their documentation

1

Es ist nicht RDBMS von Entwurf. Es ist eine Objektdatenbank. Sie können die sql-Schnittstelle verwenden und sehen, dass Daten aus traditionellen RDBMS stammen.

Ich habe es vor ein paar Jahren versucht, nur für Hobby-Projekt, vor allem zu lernen.

Eine bemerkenswerte Sache ist, dass vor 'all dem Cloud-Zeug' sie bereits System hatten, wo Sie Daten über einen Knoten speichern können, und es wird es für mehrere andere Knoten replizieren. Wenn Sie also Skalierung benötigen, können Sie dies tun. Vor etwa 10 Jahren wurde die Replikation von Daten zwischen Datenbanken von In-House-Tools, afaik, durchgeführt. Sie stellen fest, dass es ein System mit 50.000 plus Personen gibt, die online mit einer Basis arbeiten. Die Replikation kann auf verschiedene Arten erfolgen.

Die Daten werden in Bäumen gespeichert, sie nennen es Globals. Und alles, was du speicherst, ist ein Baum. Sie haben Objektzugriff, tatsächlich sind Objekte in der Datenbank Objekte in Ihrer Sprache (Objectscript, ich glaube, sie hatten Unterstützung für Java). Es gibt echte Vererbung in Daten (globals, Call it table wäre nicht korrekt). Es besteht also keine Notwendigkeit für Hibernate/Orm/Jpa/... Zeug.

Sie Sprache ist hmm, obwohl. Wenn Sie Perl Liner mögen, geht es Ihnen gut. Ansonsten ist es chalenging.