La base de données In-memory de GridGain supporte les transactions ACID et ANSI -99 SQL

La plateforme d’in-memory computing de GridGain® comprend une base de données in-memory qui supporte le traitement de données des API, dont SQL, valeur clé, calcul, machine learning et bien plus encore. Elle peut alimenter les applications modernes à haute disponibilité et à haute performance sur une solution qui confère les vitesses de l’in-memory et peut être étendue pour contenir des pétaoctets de données in-memory.

La base de données in-memory de GridGain peut être utilisée pour alimenter OLTP, OLAP ou des cas d’utilisation du traitement hybride transactionnel/analytique (HTAP). GridGain répartit votre ensemble de données sur une grappe de services, les capacités distribuées de SQL vous permettant de lire et d’écrire sur la base de données à l’aide de commandes de bases de données standard via l’interface ODBC/JDBC. Le système supporte les transactions ACID ainsi que ANSI-99 SQL, dont DDL et DML.

L’architecture centrée sur la mémoire de GridGain vous permet d’exécuter un SQL distribué, des valeurs clés et autres opérations sur différentes couches de la mémoire. Si votre entreprise déploie plusieurs technologies de mémoire, telles que DRAM, mémoire non volatile et 3D XPoint, vous pouvez régler la configuration de votre système pour utiliser une combinaison d’options de mémoire au meilleur prix du marché et pour conférer une performance optimale à votre entreprise.

In-Memory Database
La base de données in-memory de GridGain apporte des garanties de transaction ACID très importantes et le respect d’ANSI-99 SQL.

La base de données in-memory de GridGain permet de multiplier par 1 000 la vitesse de votre performance pour les applications par rapport aux bases de données sur disque puisque vos données sont stockées et traitées en RAM avec une base de données in-memory. GridGain est déployé sur une grappe de services distribués qui apportent une extensibilité de base de données massive à la base de données in-memory de GridGain. Il est facile d’étendre GridGain en ajoutant des nœuds à la grappe avec un rééquilibrage automatique de vos données.

Pour en savoir plus sur les capacités de la base de données in-memory de GridGain et sur la façon de l’intégrer à l’architecture de plateforme in-memory computing, consultez notre livre blanc intitulé Présentation de la plateforme GridGain In-Memory Computing.  Pour en savoir plus sur les différences entre la base de données in-memory et la grille de données in-memory, veuillez lire notre publication de blog « Base de données In-Memory/Grille de données In-Memory Revisitée ».

Base de données in-memory avec architecture centrée sur la mémoire

Vous pouvez utiliser la fonctionnalité de Magasin persistant pour obtenir la performance et l’extensibilité de l’in-memory computing,  lla durabilité du disque et une forte cohérence, le tout en un seul système. Le Magasin persistant est un magasin de disque distribué ACID et conforme à ANSI 99-SQL pouvant être déployé sur des disques tournants, des disques à l’état solide (SSD), 3D XPoint et d’autres technologies de mémoire de stockage. Le magasin persistant conserve l’ensemble de données sur un disque intégralement opérationnel tout en plaçant uniquement un sous-ensemble de données définies par l’utilisateur dans la mémoire.  Les entreprises peuvent régler le volume de données conservées dans l’in-memory pour obtenir un compromis optimal entre les coûts d’infrastructure et les performances de l’application. Puisque les données sur disque sont intégralement opérationnelles, il n’est pas nécessaire d’attendre que toutes les données soient chargées dans la RAM avant de commencer le traitement en cas de redémarrage d’une grappe. Le magasin persistant permet également aux entreprises de bénéficier de HTAP sans devoir conserver toutes les données in-memory.

Exemples


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());

En Savoir Plus