这是一个更多的建模问题,这是我想要实现的。
我有一个名为“DB100”的数据库,并且有实体“TABLE-1”和“TABLE-2”。这两个实体都保存着数以千计的记录,并将每天增加记录。用户还应该在两个表上执行连接查询,例如“选择a.Id,从表1选择b.Name,从表1中选择连接表-2b,其中a.Id =b.Id”。在Ignite中,这一需求的最佳建模方法是什么?
下面的方法是好的和可能的吗?或者,如果有更好的方法,请分享。
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++中。请分享任何想法,谢谢。
发布于 2022-09-09 06:50:18
实际上,您不应该在一个缓存中使用不同的值作为实体集合。相反,最好创建两个单独的缓存与SQL支持,这可以在接下来的方法中完成:
例如:
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从缓存中查询数据。在本例中,要添加新记录,只需将其插入缓存中,而无需将整个集合提取到客户端。
https://stackoverflow.com/questions/73655311
复制相似问题