Apache Ignite Java瘦客户端入门使用-键值/SQL存储

简介

Apache Ignite是一个水平可扩展以及容错的分布式SQL数据库,分布式数据是以复制或者分区的形式提供的。

作为一个SQL数据库,Ignite支持所有的DML指令,包括SELECT、UPDATE、INSERT和DELETE,它还实现了一个与分布式系统有关的DDL指令的子集。

可以像其它的SQL存储一样,根据需要与Ignite进行交互,比如通过外部的工具或者应用使用JDBC或者ODBC驱动进行连接。
在这之上,Java、.NET和C++开发者也可以使用Ignite的原生SQL API。

Apache Ignite中文文档

Apache Ignite英文文档

Maven

版本要跟集群版本一致

        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-core</artifactId>
            <version>2.8.0</version>
        </dependency>

键值存储

    public void kv() {
        //第一种
        // Ignite Addr.
        ClientConfiguration cfg = new ClientConfiguration().setAddresses("127.0.0.1:10800");
        try (IgniteClient client = Ignition.startClient(cfg)) {
            //ClientCache<String, String> cache = client.getOrCreateCache("myCache");
            ClientCache<String, String> cache = client.cache("myCache");//获取已存在的cache
            // Get data from the cache
            cache.put("key", "value");
            final String value = cache.get("key");
            cache.remove("key");
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        //第二种,自定义策略
        ClientCacheConfiguration cacheCfg = new ClientCacheConfiguration();
        cacheCfg.setName("myCache");
        cacheCfg.setOnheapCacheEnabled(true);
        cacheCfg.setBackups(1); //备份数1
        cacheCfg.setCacheMode(CacheMode.PARTITIONED); //集群数据采用分区模式
        cacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
        cacheCfg.setPartitionLossPolicy(PartitionLossPolicy.READ_WRITE_SAFE);
        cacheCfg.setDataRegionName("Default_Region"); //使用默认Region
        // Ignite Addr.
        ClientConfiguration cfg2 = new ClientConfiguration().setAddresses("127.0.0.1:10800");
        try (IgniteClient client = Ignition.startClient(cfg2)) {
            final ClientCache<String, String> cache = client.getOrCreateCache(cacheCfg);
            // Get data from the cache
            cache.put("key", "value");
            final String value = cache.get("key");
            cache.remove("key");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

SQL存储

策略参考:https://www.cnblogs.com/peppapigdaddy/p/10997068.html

     public void sql() {
        ClientCacheConfiguration cacheCfg2 = new ClientCacheConfiguration();
        cacheCfg2.setName("mySqlCacheName"); //缓存名
        cacheCfg2.setOnheapCacheEnabled(true);
        cacheCfg2.setBackups(1);
        cacheCfg2.setCacheMode(CacheMode.PARTITIONED);
        cacheCfg2.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
        cacheCfg2.setPartitionLossPolicy(PartitionLossPolicy.READ_ONLY_SAFE);
        cacheCfg2.setDataRegionName("Default_Region");
        cacheCfg2.setSqlSchema("mySqlSchemaName"); //相当于Database name, 可设置与缓存名一致
        // Ignite Addr.
        ClientConfiguration cfg2 = new ClientConfiguration().setAddresses("127.0.0.1:10800");
        try (IgniteClient client = Ignition.startClient(cfg2)) {
            final ClientCache<String, String> cache = client.getOrCreateCache(cacheCfg2);
            //建表
            List<List<?>> result = cache.query(new SqlFieldsQuery("" +
                    "CREATE TABLE IF NOT EXISTS  TEST_TABLE (" +
                    "  `id` varchar(40)," +
                    "  `name` varchar(64)," +
                    "  `age` varchar(32)," +
                    "  `creator` varchar(15)," +
                    "  `create_time` timestamp," +
                    "  PRIMARY KEY (`id`)" +
                    ") WITH \"TEMPLATE=cacheTemplate\"")).getAll();

            //INSERT
            String insert = "INSERT INTO TEST_TABLE (id, name, age, creator, create_time) " +
                    "VALUES(?, ?, ?, ?, ?)";
            List<List<?>> res = cache.query(new SqlFieldsQuery(insert).setArgs("id", "name", "17", "levi", new Date())).getAll();
            //SELECT
            final List<List<?>> all = cache.query(new SqlFieldsQuery("select count(1) from TEST_TABLE")).getAll();
            System.out.println(all.get(0).get(0));
            //UPDATE、 DELETE 同理

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

posted @ 2021-03-08 17:26  levi125  阅读(703)  评论(0编辑  收藏  举报