Die In-Memory-Datenbank von GridGain unterstützt ACID-Transaktionen und ANSI-99 SQL

Die In-Memory-Computing-Plattform von GridGain® umfasst eine In-Memory-Datenbank, die Datenverarbeitungsschnittstellen wie SQL, Schlüsselwert, Compute, Machine Learning und vieles mehr unterstützt. Sie kann für moderne, hochverfügbare leistungsstarke Anwendungen in einer Lösung mit In-Memory-Geschwindigkeit verwendet werden und lässt sich auf In-Memory-Datenvolumen im Petabyte-Bereich skalieren.

Die In-Memory-Datenbank von GridGain lässt sich für Anwendungsfälle von OLTP, OLAP oder HTAP (hybride transaktionale/analytische Verarbeitung) verwenden. GridGain verteilt Ihren Datensatz auf einen Cluster von Servern, während Sie mit den verteilten SQL-Funktionen mit standardmäßigen Datenbankbefehlen über die ODBC/JDBC-Schnittstelle auf die bzw. von der Datenbank schreiben und lesen können. Das System unterstützt ACID-Transaktionen und ANSI-99 SQL, einschließlich DDL und DML.

Dank der speicherzentrierten Architektur von GridGain können Sie verteilte SQL, Schlüsselwerte und andere Operationen auf verschiedenen Speicherschichten ausführen. Wenn Ihr Unternehmen eine Vielzahl von Speichertechnologien wie DRAM, nichtflüchtige Speicher und 3D XPoint einsetzt, können Sie die Konfiguration Ihres Systems so anpassen, dass es eine Kombination von Speicheroptionen verwendet. So optimieren Sie das Preis-Leistungs-Verhältnis für Ihr Unternehmen.

In-Memory Database
Die In-Memory-Datenbank von GridGain bietet starke ACID-Transaktionsgarantien und ANSI-99 SQL-Compliance

Die In-Memory-Datenbank von GridGain liefert eine 1000 Mal schnellere Leistung für Anwendungen im Vergleich zu festplattenbasierten Datenbanken, da Ihre Daten auf einer In-Memory-Datenbank im RAM gespeichert und verarbeitet werden. GridGain wird auf einem verteilten Cluster von Servern eingesetzt und ermöglicht dadurch eine enorme  Datenbankskalierbarkeit für die In-Memory-Datenbank von GridGain. GridGain lässt sich leicht skalieren, indem dem Cluster Knoten hinzugefügt werden. Das System gleicht Ihre Daten dabei automatisch wieder aus.

Erfahren Sie mehr über die In-Memory-Datenbank-Funktionen von GridGain und wie sie sich in die Architektur der In-Memory-Computing Plattform einfügen. Lesen Sie hierzu unser Whitepaper mit dem Titel Die neue In-Memory-Computing-Plattform von GridGain. Weitere Informationen über den Unterschied zwischen einer In-Memory-Datenbank und einem In-Memory-Daten-Grid finden Sie in unserem Blog-Post „In-Memory Database vs In-Memory Data Grid Revisited“.

In-Memory-Datenbank mit speicherzentrierter Architektur

Mit der integrierten Persistent Store-Funktion erzielen Sie die Leistung und Skalierung von In-Memory-Computing, die Haltbarkeit von Festplatten und eine sehr einheitliche Leistung, alles in einem System. Persistent Store ist ein verteilter ACID- und ANSI-99 SQL-konformer Festplattenspeicher, der auf rotierenden Festplatten, Solid-State-Laufwerken (SSDs), 3D XPoint und anderen Technologien der Speicherklasse eingesetzt werden kann. Persistent Store behält den kompletten Datenbestand auf der voll einsatzfähigen Festplatte und legt nur eine Teilmenge vom Anwender definierter zeitkritischer Daten in den Arbeitsspeicher. Unternehmen können die im Arbeitsspeicher gehaltene Datenmenge anpassen, um so einen optimalen Kompromiss zwischen Infrastrukturkosten und Anwendungsleistung zu erzielen. Und da die Daten auf der Festplatte voll einsatzfähig sind, muss der Nutzer bei einem Neustart des Clusters nicht erst warten, bis alle Daten in den RAM geladen sind. Dank Persistent Store können Unternehmen außerdem HTAP nutzen, ohne alle ihre Daten im Arbeitsspeicher halten zu müssen.

Beispiele


Ignite ignite = Ignition.ignite();
// Get an instance of named cache.
final IgniteCache<integer, string=""> cache = ignite.jcache("cacheName");</integer,>
// Store keys in cache.
for (int i = 0; i &lt; 10; i++)
  cache.put(i, Integer.toString(i));
// Retrieve values from cache.
for (int i = 0; i &lt; 10; i++)
  System.out.println("Got [key=" + i + ", val=" + cache.get(i) + ']');
// Remove objects from cache.
for (int i = 0; i &lt; 10; i++)
  cache.remove(i);
// Atomic put-if-absent.
cache.putIfAbsent(1, "1");
// Atomic replace.
cache.replace(1, "1", "2");

Ignite ignite = Ignition.ignite();
// Clone every object we get from cache, so we can freely update it.
IgniteCache<integer, account=""> cache = ignite.jcache("cacheName");</integer,>
try (IgniteTx tx = Ignition.ignite().transactions().txStart()) {
  Account acct = cache.get(acctId);
  assert acct != null;
  // Deposit $20 into account.
  acct.setBalance(acct.getBalance() + 20);
  // Store updated account in cache.
  cache.put(acctId, acct);
  tx.commit();
}

Ignite ignite = Ignition.ignite();
// Get an instance of named cache.
final GridCache<string, integer=""> cache = ignite.jcache("cacheName");</string,>
// Lock cache key "Hello".
Lock lock = cache.lock("Hello");
lock.lock();
try {
  cache.put("Hello", 11);
  cache.put("World", 22);
}
finally {
  lock.unlock();
}

Ignite ignite = Ignition.ignite();
// Get an instance of named cache.
GridCache<long, person=""> cache = ignite.jcache("cacheName");</long,>
// Create query which selects salaries based on range.
CacheQuery<map.entry<long, person="">&gt; qry =
cache.queries().createSqlQuery(Person.class, "salary &gt; ? and salary &lt;= ?");</map.entry<long,>
// Execute queries for salary ranges.
print("People with salaries between 0 and 1000: ", qry.execute(0, 1000).get());
print("People with salaries between 1000 and 2000: ", qry.execute(1000, 2000).get());

Ignite ignite = Ignition.ignite();
// Get an instance of named cache.
GridCache<long, person=""> cache = ignite.jcache("cacheName");</long,>
// Create query which joins on 2 types to select people for a specific organization.
CacheQuery<map.entry<long, person="">&gt; qry =
cache.queries().createSqlQuery(Person.class, "from Person, Organization " +
"where Person.orgId = Organization.id " +
"and Organization.name = ?");</map.entry<long,>
// Execute queries for find employees for different organizations.
print("Following people are 'Ignite' employees: ", qry.execute("Ignite").get());
print("Following people are 'Other' employees: ", qry.execute("Other").get());

Weitere Informationen