用于使用HyperTable的C#库

时间:2012-05-15 15:31:50

标签: c# asp.net database nosql hypertable

我正在搜索允许我连接到Hypertable DB的连接器/库。我在Windows机器上安装了Hypertable,但我不知道如何连接它。我在Visual Studio中使用ASP.NET 4.5 C#。

我试过这个: http://ht4n.softdev.ch/index.php/getting-started-in-5min

但我不知道如何使用它。将ht4d.dll导入到' bin'文件夹,但不知道我还应该做什么。

感谢。

3 个答案:

答案 0 :(得分:1)

首先确保安装成功。 确保PATH系统环境变量指向超级安装文件夹 在我的系统上:

 C:\Program Files\Hypertable

之后尝试从cmd命令" hypertable" 你需要得到一个超级欢迎的消息。

我还下载了ht4n连接器 我创建了一个控制台应用程序来测试它 我创建了对ht4n.dll的引用

这是我使用的代码并且已成功连接:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Hypertable;

namespace HypertableTest1
{
class Program
{
    static void Main(string[] args)
    {

        //Hyper net.tcp://host[:port]   Native Hypertable client protocol
        //Thrift    net.tcp://host[:port]   Hypertable Thrift API
        //SQLite    file://[drive][/path]/filename  Embedded key-value store, based on SQLite
        //Hamster   file://[drive][/path]/filename  Embedded key-value store, based on hamsterdb

        var connectionString = "Provider=Hyper;Uri=net.tcp://localhost";

        using (var context = Context.Create(connectionString))
        using (var client = context.CreateClient())
        {
            // use the client
            //client.CreateNamespace("CSharp");

            if (!client.NamespaceExists("/CSharp"))
                client.CreateNamespace("/CSharp");

            INamespace csNamespace = client.OpenNamespace("CSharp");    
            csNamespace.CreateTable("MyFirstTable", "");
            IList<Cell> c = csNamespace.Query("");
        }

        Console.ReadLine();
    }
}
}

答案 1 :(得分:1)

在这里犯罪 ht4n很烦人。

首先,它属于GNU通用公共许可证v3(不是LGPL)和商业闭源许可证。基本上,没有比这更好的了。

然后它用C ++ .NET编写,虽然比Thrift快,但在Windows上创建了一个平台依赖(mono不支持C ++ .NET)。
因为它是用C ++ .NET编写的,所以它附带了那些独立的32/64位dll版本,它们只能在Windows上的x86(32/64)处理器上运行。
如果你想要一个而不是另一个,你必须重新编译...
这两个问题结合在一起,不仅是愚蠢的商业许可证,而且还违背了像.NET这样的VM语言的想法。


由于我的Chrubuntu Chromebook使用Linux(带ARM处理器)和C ++ .NET无法在那里工作,我已将Java Thrift-Client移植到C#。

你可以找到它&gt; here&lt;。{
附带一个很好的示例程序btw。

基本上

ThriftClient client = null;
long ns = -1;

try
{
    client = ThriftClient.create("localhost", 38080);

    if (!client.namespace_exists("test"))
    {
        System.Console.WriteLine("Namespace test does not exist");
        client.create_namespace("test");
    }

    ns = client.namespace_open("test");

    System.Console.WriteLine(client.hql_query(ns, "show tables").ToString());


    client.namespace_close(ns);
} // End Try
catch (System.Exception e)
{
    System.Console.WriteLine (e.Message);
    System.Console.Error.WriteLine (e.StackTrace);

    try
    {
        if (client != null && ns != -1)
            client.namespace_close(ns);
    } 
    catch (System.Exception ex)
    {
        System.Console.WriteLine (ex.Message);
        System.Console.Error.WriteLine("Problem closing namespace \"test\" - " + e.Message);
    }
    System.Environment.Exit(1);
} // End Catch

Thrift-Client可以在任何地方工作,具有任意数量的位 而且 - 最重要的是 - 从现在开始,您可以使用所有Java Thrift-samples / tutorials进行最小的更改。

答案 2 :(得分:0)

Hypertable通过Apache Thrift服务堆栈公开高级API,因此可以为许多不同的语言生成客户端库 - 包括C#:

  • 下载Apache Thrift,包括thrift编译器
  • here
  • 下载Hypertable IDL文件 Client.thrift Hql.thrift
  • 运行thrift编译器 thrift-0.9.2 --gen csharp Client.thrift Hql.thrift
  • 一起打包

对于Hypertable 序列化 API,您需要一个SerializedCellReader / SerializedCellWriter,所有内容都可以下载here