首页 文章

Apache Ignite:如何列出所有表和所有缓存

提问于
浏览
3

有没有办法列出特定Cache中的所有表,并列出Apache Ignite Server上的所有缓存?

                                  • 更新 - - - - - - - - -----------嗨,我正在运行以下代码来了解缓存名称并列出缓存中存在的所有表 . 此程序列出服务器上存在的所有缓存名称 . 但是表格列表打印为空白集合 . 同时在示例中出现的SQL查询工作正常 .
public static void main(String[] args) throws Exception {
        System.out.println("Run Spring example!!");
        Ignition.setClientMode(true);
        IgniteConfiguration cfg = new IgniteConfiguration();
        cfg.setIncludeEventTypes( EVTS_CACHE);
        cfg.setPeerClassLoadingEnabled(true);
        TcpDiscoveryMulticastIpFinder discoveryMulticastIpFinder = new TcpDiscoveryMulticastIpFinder();
        Set<String> set = new HashSet<>();

        set.add("hostname:47500..47509");

        discoveryMulticastIpFinder.setAddresses(set);

        TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi();
        discoverySpi.setIpFinder(discoveryMulticastIpFinder);

        cfg.setDiscoverySpi(discoverySpi);

        cfg.setPeerClassLoadingEnabled(true);
        cfg.setIncludeEventTypes(EVTS_CACHE);
        Ignite ignite = Ignition.start(cfg);

        System.out.println("All Available Cache on server : "+ignite.cacheNames());

        CacheConfiguration<String, BinaryObject> cacheConfiguration = new CacheConfiguration<>(CACHE_NAME);

        Collection<QueryEntity> entities = cacheConfiguration.getQueryEntities();
        System.out.println("All available tables in cache : "+entities);

        cacheConfiguration.setIndexedTypes(String.class, BinaryObject.class);
        //cacheConfiguration.setCacheMode(CacheMode.PARTITIONED);

        IgniteCache<String, BinaryObject> cache = ignite.getOrCreateCache(cacheConfiguration).withKeepBinary();

        System.out.println();





            QueryCursor<List<?>> query = cache.query(new SqlFieldsQuery("select Field1 from table1 where Field1='TEST'"));
            List<List<?>> all = query.getAll();
            for (List<?> l : all) {
                System.out.println(l);
            }

    }

2 回答

  • 4

    获取所有缓存名称: Ignite.cacheNames() . 然后使用 Ignite.cache(String) 获取缓存实例 .

    获取SQL表:

    CacheConfiguration ccfg = cache.getConfiguration(CacheConfiguration.class);
    Collection<QueryEntity> entities = ccfg.getQueryEntities();
    

    每个查询实体代表一个表 .

  • 0

    您可以使用 Ignite.cacheNames() 获取所有缓存名称 . 要获取所有表名,可以使用 SHOW TABLES 命令:

    QueryCursor<List<?>> cursor = cache.query(new SqlFieldsQuery("SHOW TABLES FROM \""+CACHE_NAME+"\""));
    for (List<?> row : cursor) {
        System.out.println(row.get(0));
    }
    

    有关 SHOW 命令的更多详细信息,请访问:http://www.h2database.com/html/grammar.html#show

相关问题