Как настроить базу данных оракула в apache ignite .NET

Я пытаюсь настроить свойства сквозной записи и чтения apache Ignite с базой данных Oracle. Я искал во многих местах, таких как официальная документация Ignite, а также в примерах ignite на GitHub, но не так много информации или примеров, закодированных на C#, на котором я разрабатываю свое приложение.

Я хочу получить из постоянного хранилища (в данном случае базы данных Oracle) определенные данные в кеше (Ignite), которые еще не загружены. Аналогичным образом мне нужно, чтобы все мои изменения в кеше отражались в базе данных.

Я привязал к create и spring.xml конфигурацию базы данных (ip, порт, имя пользователя, пароль, базу данных), но не могу заставить его работать, если так надо.

Заранее спасибо и извините за мой английский.


person Santiago Casás    schedule 25.03.2017    source источник


Ответы (1)


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, загрузите, разархивируйте, откройте platform\dotnet\examples\Apache.Ignite.Examples.sln)

Сообщение в блоге, объясняющее реализацию хранилища кеша в C#: https://ptupitsyn.github.io/Entity-Framework-Cache-Store/

Работа с Oracle DB в .NET: Подключение к Oracle Database через C#?

person Pavel Tupitsyn    schedule 26.03.2017
comment
спасибо за ваш ответ, но я не понимаю, где вы устанавливаете параметры подключения к базе данных оракула, я имею в виду, где вы указываете URL-адрес, имя пользователя и пароль. Можете ли вы объяснить мне эту часть? Благодарность! - person Santiago Casás; 26.03.2017
comment
Я добавил еще несколько деталей, хотя это не относится к теме Ignite.NET. См. этот вопрос для получения подробной информации об Oracle: /вопросы/12568100/ - person Pavel Tupitsyn; 27.03.2017
comment
Спасибо! Я попробую с этим. - person Santiago Casás; 29.03.2017