apache.ignite.net查询密钥/值数据通过ODBC



ignite具有(包括(用例"内存密钥/值存储"one_answers"通过ODBC"的" SQL"。我想知道这些用例是否可以合并。

让我们使用此模型:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

将"人"添加到密钥/值存储:

using (var ignite = Ignition.Start())
{
    var cache = ignite.GetOrCreateCache<int, Person>("person-cache");
    cache.Put(1, new Person { Name = "Test", Age=7 });
}

现在,我可以做

之类的事情吗
SELECT * FROM Person; 

通过ODBC连接?如果是,则非常感谢C#/Ignite.net中的代码样本。还是不可能,因为我们是在谈论完全独立的数据存储/缓存?

当然,您可以使用Apache Ignite进行。有三件事要做:

  1. 使用所需的SQL字段更新您的人模型:

    class Person
    {
        [QuerySqlField(IsIndexed = true)]
        public string Name { get; set; }
        [QuerySqlField]
        public int Age { get; set; }
    }
    
  2. 添加SQL查询类型(人类类型(到cacheconfiguration

  3. 访问表格时不要忘记使用带有引号的模式名称(=缓存名称(:

        using (var ignite = Ignition.Start())
        {
            var cache = ignite.GetOrCreateCache<int, Person>(new CacheConfiguration("person-cache", typeof(Person)));
            cache.Put(1, new Person { Name = "Test", Age = 7 });
            var dbConnection = new OdbcConnection(@"DRIVER={Apache Ignite};ADDRESS=localhost:10800");
            try
            {
                dbConnection.Open();
                using (var dbCommand = dbConnection.CreateCommand())
                {
                    dbCommand.CommandText = @"SELECT * FROM ""person-cache"".Person WHERE Name=?";
                    dbCommand.Parameters.Add("Name", OdbcType.Char).Value = "Test";
                    var dbReader = dbCommand.ExecuteReader();
                    var fCount = dbReader.FieldCount;
                    while (dbReader.Read())
                    {
                        for (var i = 0; i < fCount; i++)
                        {
                            var val = dbReader.GetString(i);
                            var name = dbReader.GetName(i);
                            Console.WriteLine(name + "=" + val);
                        }
                    }
                    dbReader.Close();
                }
            }
            catch (OdbcException ex)
            {
                Console.WriteLine(ex);
            }
            Console.ReadKey();
        }
    

谢谢,Alexey

相关内容

最新更新