# C++开发向导
# 1.SQL API
# 1.1.SqlFieldsQueries
SqlFieldsQuery
接受一个标准SQL作为其构造器的参数,下面是其执行查询的代码。可以只选定特定的字段,来最小化网络和序列化开销。
可查询字段定义
在特定字段可以被SqlFieldsQuery
访问之前,它们应做为SQL模式的一部分,使用标准的DDL命令,或者特定的.NET属性,或者QueryEntity
配置,都可以进行字段的定义。
通过SqlFieldsQuery
,还可以使用DML命令进行数据的修改:
# 2.模式和索引
除了常规的DDL命令,C++开发者还可以使用特定的SQL API进行模式和索引的定义。
# 2.1.基于QueryEntity的配置
索引和字段可以通过org.apache.ignite.cache.QueryEntity
进行配置,其使用基于Spring的XML配置,还是很方便的:
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="mycache"/>
<!-- Configure query entities -->
<property name="queryEntities">
<list>
<bean class="org.apache.ignite.cache.QueryEntity">
<property name="keyType" value="java.lang.Long"/>
<property name="valueType" value="Person"/>
<property name="fields">
<map>
<entry key="id" value="java.lang.Long"/>
<entry key="orgId" value="java.lang.Long"/>
<entry key="firstName" value="java.lang.String"/>
<entry key="lastName" value="java.lang.String"/>
<entry key="resume" value="java.lang.String"/>
<entry key="salary" value="java.lang.Double"/>
</map>
</property>
<property name="indexes">
<list>
<bean class="org.apache.ignite.cache.QueryIndex">
<constructor-arg value="id"/>
</bean>
<bean class="org.apache.ignite.cache.QueryIndex">
<constructor-arg value="orgId"/>
</bean>
<bean class="org.apache.ignite.cache.QueryIndex">
<constructor-arg value="salary"/>
</bean>
</list>
</property>
</bean>
</list>
</property>
</bean>
运行时更新索引和可查询字段
如果需要在运行时管理索引或者使新的字段对SQL引擎可见,可以使用ALTER TABLE, CREATE/DROP INDEX命令。
# 2.2.自定义主键
如果主键只使用了预定义的SQL数据类型,则无需使用与模式相关的配置来执行其他操作。
预定义SQL数据类型
- 所有的有符号整形类型;
bool
;float
;double
;std::string
;ignite::Timestamp
;ignite::Date
;ignite::Guid
;int8_t[]
。
不过一旦决定引入自定义复杂主键并在DML语句中引用其字段,就必须在QueryEntity
配置中将QueryField.IsKeyField
设置为true
。
XML:
<cacheConfiguration name="cars">
<queryEntities>
<queryEntity keyTypeName="CarKey" valueTypeName="Car">
<fields>
<queryField fieldType="System.String" fieldTypeName="java.lang.String" isKeyField="true" name="VIN" />
<queryField fieldType="System.Int32" fieldTypeName="java.lang.Integer" isKeyField="true" name="Id" />
<queryField fieldType="System.String" fieldTypeName="java.lang.String" name="Make" />
<queryField fieldType="System.Int32" fieldTypeName="java.lang.Integer" name="Year" />
</fields>
</queryEntity>
</queryEntities>
</cacheConfiguration>
18624049226