GridGain In-Memory Data Grid

1,000x Better Performance Versus Disk-Based Databases

The GridGain In-Memory Data Grid improves performance by more than 1,000x by removing the delays inherent in accessing disk-based data. Inserted between the application and data layers, the system moves disk-based data from RDBMS, NoSQL or Hadoop databases into RAM. In addition to the high performance GridGain In-Memory Data Grid, the GridGain in-memory computing platform includes powerful features including a compute grid, streaming, and Spark and Hadoop acceleration.

The GridGain In-Memory Data Grid is horizontally scalable with the ability to add nodes on demand in real-time. It can linearly scale to hundreds of nodes with strong semantics for data locality and affinity data routing to reduce redundant data noise.

The GridGain In-Memory Data Grid supports local, replicated, and partitioned data sets. You can freely cross query between these data sets using standard SQL syntax. It supports standard SQL for querying in-memory data including support for distributed SQL joins. The GridGain in-memory computing platform offers an extremely rich set of data grid capabilities, including off-heap memory support, load-balancing, fault tolerance, remote connectivity, support for full ACID transactions and advanced security.

In Memory Data Grid
A distributed key-value store which is deployed between the database and application layer and seamlessly reads and writes to the underlying database

Features:

  • Distributed In-Memory Caching
  • Lightning Fast Performance
  • Elastic Scalability
  • Distributed In-Memory Transactions
  • Distributed In-Memory Queue and Other Data Structures
  • Web Session Clustering
  • Hibernate L2 Cache Integration
  • Tiered Off-Heap Storage
  • Distributed SQL Queries with Distributed Joins
Examples:


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

Learn More