如何在Apache Ignite .NET中配置Oracle数据库。

4
我正在尝试配置Apache Ignite的写入和读取属性,以与Oracle数据库配合使用。我在许多地方搜索了Ignite官方文档,还在GitHub上的Ignite示例中搜索过,但是没有太多关于C#编写的信息或示例,而这是我开发应用程序所使用的语言。
我的目标是从持久存储(在这种情况下是Oracle数据库)中检索在缓存(Ignite)中未加载的特定数据。类似地,我需要在缓存中进行的所有更改都反映在数据库中。
我尝试创建一个带有数据库配置(IP、端口、用户名、密码、数据库)的spring.xml文件,但如果这是应该完成的方式,我无法使其正常工作。
提前感谢您的帮助,对我的英语不好表示抱歉。
1个回答

3

1) 实现 ICacheStore 接口(或继承 CacheStoreAdapter 帮助类)。

public class OracleStore : CacheStoreAdapter
{
    public override object Load(object key)
    {
        using (var con = new OracleConnection
        {
            ConnectionString = "User Id=<username>;Password=<password>;Data Source=<datasource>"
        })
        {
            con.Open();

            var cmd = con.CreateCommand();
            cmd.CommandText = "SELECT * FROM MyTable WHERE ID=@id";
            cmd.Parameters.Add("@id", OracleType.Int32);
            cmd.Parameters["@id"].Value = key;

            using (var reader = cmd.ExecuteReader())
            {
                // Read data, return as object
            }
        }
    }

    public override void Write(object key, object val)
    {
        oracleDb.UpdateRow(key, val);
    }

    public override void Delete(object key)
    {
        oracleDb.DeleteRow(key);
    }
}

2) 实现存储工厂:

public class OracleStoreFactory : IFactory<OracleStore>
{
    public OracleStore CreateInstance()
    {
        return new OracleStore();
    }
}

3) 配置缓存以使用存储:

using (var ignite = Ignition.Start())
{
    var cacheCfg = new CacheConfiguration
    {
        ReadThrough = true,
        WriteThrough = true,
        KeepBinaryInStore = false,  // Depends on your case
        CacheStoreFactory = new OracleStoreFactory()
    };

    var cache = ignite.CreateCache<int, MyClass>(cacheCfg);

    cache.Get(1);  // OracleStore.Load is called.
}

Ignite.NET文档(使用C#):https://apacheignite-net.readme.io/docs/persistent-store

完整的下载包中提供了C#示例:https://ignite.apache.org/download.cgi#binaries(点击apache-ignite-fabric-1.9.0-bin.zip,下载,解压,打开 platforms\dotnet\examples\Apache.Ignite.Examples.sln)

用C#实现缓存存储的博客文章:https://ptupitsyn.github.io/Entity-Framework-Cache-Store/

在.NET中使用Oracle DB:Connecting to Oracle Database through C#?


谢谢你的回答,但我不明白你在哪里设置Oracle数据库的连接参数,我的意思是,你在哪里放置URL、用户名和密码。你能解释一下这部分吗?谢谢! - Santiago Casás
我增加了一些详细信息,虽然它与Ignite.NET的主题无关。有关Oracle详细信息,请参阅此问题:https://dev59.com/MWcs5IYBdhLWcg3w0HEa - Pavel Tupitsyn
谢谢!我会试一下。 - Santiago Casás

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接