1

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

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

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

谢谢。

4

3 回答 3

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#。

你可以找到它>这里<。
附带一个很好的示例程序顺便说一句。

基本上

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 并进行最少的更改。

于 2014-08-27T10:30:50.633 回答
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();
    }
}
}
于 2012-06-06T20:02:07.697 回答
0

Hypertable exposes the high-level API through an Apache Thrift service stack, therefore client libaries can be generated for many different languages - including C#:

  • Download Apache Thrift, including the thrift compiler
  • Download the Hypertable IDL files Client.thrift and Hql.thrift from here
  • Run the thrift compiler thrift-0.9.2 --gen csharp Client.thrift Hql.thrift
  • Pack all together

For the Hypertable serialized API you'll need a SerializedCellReader/SerializedCellWriter, everything together is available for download here.

于 2015-04-08T19:37:40.923 回答