我正在尝试围绕大量的部分数据库实例管理分散的数据库。每个实例都有整个数据的子集,它们都是节点和客户端,因此要求查询某些数据,查询必须传播到每个(组)实例,并由哪个实例返回数据。
由于要避免一个实例发生故障而丢失数据,我发现它们必须与其他实例复制其内容。如何使用Ignite配置这种情况?
假设我有一个表,其中包含分布式应用程序中用户的名称和上次访问日期时间,例如...
class UserLogOns
{
string UserName;
DateTime LastAccess;
}
现在程序启动时,我准备将Ingite用作分散式数据库...
static void Main(string[] args)
{
TcpCommunicationSpi commSpi = new TcpCommunicationSpi();
// Override local port.
commSpi.LocalPort = 44444;
commSpi.LocalPortRange = 0;
IgniteConfiguration cfg = new IgniteConfiguration();
// Override default communication SPI.
cfg.CommunicationSpi = commSpi;
using (var ignite = Ignition.Start(cfg))
{
var cfgCache = new CacheConfiguration("mio");
cfgCache.AtomicityMode = CacheAtomicityMode.Transactional;
var cache = ignite.GetOrCreateCache<string, UserLogOns>(cfgCache);
cache.Put(Environment.MachineName, new UserLogOns { UserName = Environment.MachineName, LastAccess = DateTime.UtcNow });
}
}
现在……我想获得其他“ computerB”的LastAccess。.
这是正确的吗?如何实施?
答案 0 :(得分:0)
这取决于您要实现的确切用例。通常,Ignite提供了开箱即用的功能。
这是在Ignite中使用SQL的好方法:https://apacheignite-sql.readme.io/docs
使用“ template = partitioned”而不是“ replicated”创建表,如此处的示例所示:https://apacheignite-sql.readme.io/docs/getting-started#section-creating-tables,配置备份数并选择一个字段作为关联键(该字段用于将特定的条目映射到群集节点),然后运行一些查询。
如果要使用本机持久性,还请检查基线拓扑的概念:https://apacheignite.readme.io/docs/baseline-topology。
内存模式将自动触发每次服务器拓扑更改时节点之间的重新平衡(可以存储数据输入/输出的节点)。