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进行。有三件事要做:
-
使用所需的SQL字段更新您的人模型:
class Person { [QuerySqlField(IsIndexed = true)] public string Name { get; set; } [QuerySqlField] public int Age { get; set; } }
-
添加SQL查询类型(人类类型(到cacheconfiguration
-
访问表格时不要忘记使用带有引号的模式名称(=缓存名称(:
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