使用Apache Ignite构建C++版本的分布式应用
为什么80%的码农都做不了架构师?>>>
本文会介绍Apache Ignite的C++ API(称为Ignite C++),主要面向C/C++开发者。
Ignite和Ignite C++
- Ignite C++构建于Ignite之上;
- Ignite C++在同一个进程中启动JVM,并且通过JNI与之通信;
- .NET、C++和Java节点可以加入同一个集群,使用相同的缓存,并且使用通用的二进制协议进行互操作;
- Java计算作业可以在任意节点上执行(Java、.NET和C++)。
入门
因为Ignite是一个分布式平台,所以开始就要先启动一个节点,这方面如果使用ignite::Ignition
类是非常简单的:
好了,在C++环境中已经使用默认的配置启动了第一个Ignite节点!其中Ignite
类是访问集群的主要入口点。
数据操作
暴露数据操作API的主要Ignite C++组件是ignite::cache::Cache<K,V>
。它包含了基本的数据操作方法集。由于缓存本质上是作为分布式哈希表的接口,因此基本上可以像处理简单容器(map
或者unordered_map
)那样与它进行交互。
Ignite主要是用Java开发的,Ignite组件的实现也使用了很多Java的特性,比如,对象的序列化/反序列化就用在了磁盘存储和对象的网络传输上。
在Ignite C++中,这个特性通过ignite::binary::BinaryType<T>
模板限定来实现:,不管是普通的客户端还是瘦客户端,都是用的这个方式,对于上面提到的Person
类,大致如下:
这里除了序列化/反序列化方法BinaryType<Person>::Write
和BinaryType<Person>::Read
外,还有其它的一些方法,它们用于向平台说明,如何在其它语言中处理自定义C++类型,尤其是在Java中,下面会详细探讨这些方法:
GetTypeName()
:返回类型名。该类型名在所有使用这个类型的平台中都应该是一致的,如果只在Ignite C++中使用这个类型,那么这个命名就没有强制要求;GetTypeId()
:返回跨平台的唯一类型ID。要想在所有平台上都有正确的行为,那么所有的实现都必须使用相同的计算方法。GetBinaryStringHashCode(TypeName)
在任意平台的默认实现,都会返回相同的类型ID,因此这种实现方式在任意平台上都能保证该类型的正确使用;GetFieldId()
:返回字段名的唯一ID。不过要保证跨平台,要使用GetBinaryStringHashCode()
方法;IsNull()
:检查类实例是否为空,该方法用于NULL值的正确序列化,对于类实例用处不大,不过如果用户想处理智能指针以及定义比如BinaryType< std::unique_ptr<Person>>
这样的限定,则可能会比较方便;GetNull()
:如果要反序列化NULL值,会调用它。关于IsNull()
的说法,也适用于GetNull()
。
SQL
与传统数据库类似,可以将缓存视为数据库模式,并且该模式只有一个表名为类型名的表。除了缓存模式之外,还有一个名为PUBLIC
的公共模式,在该模式中,可以使用标准DDL指令(如CREATE TABLE
、DROP TABLE
等)创建/删除任意数量的表。通常,如果只想将Ignite用作分布式数据库,则可以通过ODBC/JDBC连接到PUBLIC
模式。
Ignite支持完整的SQL查询,包括DML和DDL。通过MVCC,SQL事务也是支持的,不过还处于测试阶段。
要通过SQL处理缓存数据,必须在缓存配置中显式指定将在SQL查询中使用哪些对象字段。配置在XML文件中进行了描述,之后将在节点启动时指定配置文件的路径:
该配置会由Java来解析,因此其中的基本类型在Java中也要指定,配置文件建好之后,就可以启动一个节点,获取一个缓存实例,进而处理SQL:
这时候就可以执行INSERT、UPDATE、CREATE TABLE以及其它查询了,当然,跨缓存查询也是支持的。不过这种情况下要注意,需要给查询中的缓存名上加上引号,作为模式名,比如这样不行:
要这样写:
好了,暂时就写这么多,Apache Ignite功能强大,C++ API目前也仍在全力开发中,所以请继续关注未来的更新。
转载于:https://my.oschina.net/liyuj/blog/3006502
使用Apache Ignite构建C++版本的分布式应用相关推荐
- Apache Ignite详解
文章目录 一.Ignite简介和用途 简介 (1)In-Memory Database (2)Key-Value In-Memory Data Grid (3)Database Caching (4) ...
- Apache Ignite(二):核心特性一览(V1.4.0版本)
为什么80%的码农都做不了架构师?>>> 1.数据网格 Ignite内存数据网格是一个内存内的键值存储,他可以在分布式集群的内存内缓存数据. 它通过强语义的数据位置和关系数据路 ...
- apache ignite_从In Memory Data Grid,Apache Ignite快速入门
apache ignite IMDG或内存数据网格不是内存中关系数据库,NOSQL数据库或关系数据库. 它是另一种软件数据存储库. 数据模型分布在单个位置或多个位置的许多服务器上. 这种分布称为数据结 ...
- 用Apache Ignite实现可扩展的数据网格
在本文中,我们将先介绍数据网格(Data Grid)的基本概念.属性.以及能够提供的服务,然后讨论如何设计可扩展的数据网格,以满足实际场景的业务需求. 什么是数据网格? 数据网格是一组能够提供共享数据 ...
- apache ignite_使用Spring Data的Apache Ignite
apache ignite Spring Data提供了一种统一而简便的方法来访问不同类型的持久性存储,关系数据库系统和NoSQL数据存储. 它位于JPA之上,添加了另一层抽象并定义了基于标准的设计以 ...
- apache ignite_使用Apache Storm和Apache Ignite进行复杂事件处理(CEP)
apache ignite 在本文中, "使用Apache Ignite进行高性能内存计算"一书的作者将讨论使用Apache Strom和Apache Ignite进行复杂的事件处 ...
- Apache Ignite变得简单:第一个Java应用程序
在本文中,我们将更进一步,让您完成第一个Ignite应用程序的创建,以从分布式缓存中进行读写操作. 作为第一个示例,我们将尽可能简单地向您展示如何用Java编写用于处理Apache Ignite集群数 ...
- 使用Spring Data的Apache Ignite
Spring Data提供了一种统一而简单的方法来访问不同类型的持久性存储,关系数据库系统和NoSQL数据存储. 它位于JPA之上,添加了另一层抽象并定义了基于标准的设计以在Spring上下文中支持持 ...
- 使用Apache Storm和Apache Ignite进行复杂的事件处理(CEP)
在本文中, "使用Apache Ignite进行高性能内存计算"一书的作者将讨论使用Apache Strom和Apache Ignite进行复杂的事件处理. 本文的一部分摘自 书 ...
最新文章
- 系统优化怎么做-SQL优化
- 鸟哥的Linux私房菜(基础篇)-第一章、Linux是什么(一.3. Linux的特色)
- 使用Data::Dumper
- 读取打印TFRecord格式数据
- storm的并行度的解释--- ( 看完就能理解 )
- linux 使用yum给已安装的软件降级
- 基于Android官方Paging Library的RecyclerView分页加载框架
- 高中计算机技术教材,广西科学技术出版高中信息技术教材第一册《计算机硬件组成》...
- 计算机专业考研北京有哪些学校,计算机考研北京地区学校大全!
- c语言中 结构体对象,C语言中结构体详解
- STM8学习笔记1:CPU简介
- K2 BPM平台应用价值(上篇):统一的流程管理平台对企业有多重要?|工作流平台
- 树莓派源码安装glib
- css 剪辑图片_css如何截取图片?
- 基于Python库surprise的电影推荐系统
- 操作系统之进程管理相关总结
- 计算机网络 第四章 答案(更正版)(谢希仁 第七版)
- table 表格,序号控制
- PADS 免费视频教程
- JAP和Spring整合的三种方式详细方法