首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在单个缓存中保存多个实体,并将记录附加到Ignite中现有的实体集合中?

如何在单个缓存中保存多个实体,并将记录附加到Ignite中现有的实体集合中?
EN

Stack Overflow用户
提问于 2022-09-08 21:43:44
回答 1查看 50关注 0票数 0

这是一个更多的建模问题,这是我想要实现的。

我有一个名为“DB100”的数据库,并且有实体“TABLE-1”和“TABLE-2”。这两个实体都保存着数以千计的记录,并将每天增加记录。用户还应该在两个表上执行连接查询,例如“选择a.Id,从表1选择b.Name,从表1中选择连接表-2b,其中a.Id =b.Id”。在Ignite中,这一需求的最佳建模方法是什么?

下面的方法是好的和可能的吗?或者,如果有更好的方法,请分享。

代码语言:javascript
复制
var cache = ignite.GetOrCreateCache<string, int>("DB100");

cache[“TABLE-1”] = EntityCollection-1;
cache[“TABLE-2”] = EntityCollection-2;

var sqlp = new SqlFieldsQuery("select a.Id, b.Name from TABLE-1 a JOIN TABLE-2 b where a.Id = b.Id");
                    using (var cursor = cache.Query(sqlp))
                    {
                        foreach (var row in cursor) // throws exception 
                        {
                            
                        }
                    }

如果可能的话,我们希望每天远程添加实体集合,而不将整个集合获取到客户端。为此,我们尝试了入口处理器,但可能由于服务器和客户端的不匹配而导致错误。我们的客户端代码(厚)在C#中,服务器节点在C++中。请分享任何想法,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-09 06:50:18

实际上,您不应该在一个缓存中使用不同的值作为实体集合。相反,最好创建两个单独的缓存与SQL支持,这可以在接下来的方法中完成:

例如:

代码语言:javascript
复制
CacheConfiguration<Long, CacheEntry1> ccfg = new CacheConfiguration<Long, CacheEntry1>()
    .setName("Cache1")
    .setQueryEntities(
            Arrays.asList(
                    new QueryEntity(Long.class, CacheEntry1.class)
                        .setTableName("Table1")
                        .addQueryField("id", Long.class.getName(), null)
                        .addQueryField("name", String.class.getName(), null)
            )
    );

IgniteCache<Long, CacheEntry1> cache1 = ignite.createCache(ccfg);

对于第二个缓存,也应该这样做。之后,您将能够使用SQL从缓存中查询数据。在本例中,要添加新记录,只需将其插入缓存中,而无需将整个集合提取到客户端。

此外,如果您想要使用连接,您应该知道数据同步定位,您可以找到更多关于这里这里的详细信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73655311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档