GridGain内存数据库支持ACID事务和ANSI-99 SQL

GridGain®内存计算平台包括一个内存数据库,支持数据处理API,包括SQL、键值、计算、机器学习等。通过内存级速度和对PB级数据的支撑方案,对现代、高可用性和高性能应用提供助力。

GridGain内存数据库可支撑OLTP、OLAP或或混合事务/分析处理(HTAP)使用场景。GridGain在服务器集群中分发数据集,而分布式SQL功能可以使用标准数据库命令通过ODBC/JDBC接口读取和写入数据库。该系统提供ACID事务支持,并支持ANSI-99 SQL,包括DDL和DML。

以内存为中心的GridGain架构可以跨不同的内存层执行分布式SQL、键值和其他操作。如果客户部署了各种内存技术(如DRAM、非易失性内存和3D XPoint),就可以调整系统配置以使用各种内存组合选项,从而为客户提供价格和性能之间的最佳平衡。

In-Memory Database
GridGain内存数据库提供强大的ACID事务保证和ANSI-99 SQL兼容性。

GridGain内存数据库为应用提供的性能比基于磁盘的数据库快上千倍,因为数据是使用内存数据库在内存中存储和处理的。GridGain部署在分布式服务器集群上,为GridGain内存数据库提供了巨大的数据库可扩展性。通过向集群添加节点,可以轻松扩展GridGain,系统会自动对数据进行再平衡。

通过阅读题为“GridGain内存计算平台介绍”的白皮书,您可以了解GridGain的内存数据库功能以及它们如何适应内存计算平台架构的更多信息。要了解有关内存数据库和内存数据网格之间差异的更多信息,请阅读我们的博客文章“重新审视内存数据库与内存数据网格”。

基于内存中心架构的内存数据库

通过集成的原生持久化,可以在一个系统中同时实现大规模和高性能的内存计算、基于磁盘的持久性以及强一致性。原生持久化是一种符合分布式ACID和ANSI-99 SQL标准的磁盘存储,可以部署在机械磁盘、固态硬盘(SSD)、3D XPoint和其他存储级内存技术上。原生持久化将完整数据集保存在磁盘上,该磁盘完全可操作,同时仅将一部分用户定义的热数据放入内存中。客户可以调整内存中保留的数据量,以实现硬件成本和应用性能之间的最佳平衡。并且因为磁盘上的数据是完全可操作的,所以在集群重启时,无需等待所有数据加载到内存中。原生持久化还使客户能够执行HTAP业务,而无需将所有数据保存在内存中。

示例


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

进一步了解