【问题标题】:Apache.Ignite.NET Query Key/Value data via ODBCApache.Ignite.NET 通过 ODBC 查询键/值数据
【发布时间】:2018-02-14 06:28:18
【问题描述】:

Ignite 有(除其他外)用例“内存中键/值存储”和“通过 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 中的代码示例。 还是因为我们谈论的是完全独立的数据存储/缓存所以不可能?

【问题讨论】:

    标签: .net ignite


    【解决方案1】:

    当然,您可以使用Apache Ignite 来完成。 要做三件事:

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

      class Person
      {
          [QuerySqlField(IsIndexed = true)]
          public string Name { get; set; }
      
          [QuerySqlField]
          public int Age { get; set; }
      }
      
    2. 将 SQL 查询类型(Person 类型)添加到 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();
          }
      

    谢谢你, 阿列克谢

    【讨论】:

    • 对于像我这样的其他新手。不要忘记安装您在此处找到的相应 ODBC 驱动程序:apache-ignite-fabric-2.3.0-bin\platforms\cpp\bin\odbc\ignite-odbc-amd64.msi / ignite-odbc-x86.msi
    • 您的代码示例效果很好。您是否知道支持 Apache.Ignite 的 SQL 编辑器/GUI?我尝试了etl-tools.com/database-browser/overview.html 和 Excel - 外部 ODBC 数据源,但没有成功。
    • 我前段时间用过 DBeaver (GUI)。请参阅apacheignite.readme.io/v2.1/docs/sql-tooling 了解更多详情。 Apache Ignite 2.3 具有可以从 apache-ignite-fabric-2.3.0-bin/bin/sqlline.bat 或 .sh 运行的 SQLLine(没有 GUI,只是一个控制台应用程序)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 2012-07-31
    • 2012-06-17
    • 1970-01-01
    相关资源
    最近更新 更多