当前位置: 首页 > 面试题库 >

Cassandra客户端Java API的

叶文博
2023-03-14
问题内容

我最近开始使用Cassandra数据库。现在,我正在评估Cassandra client我们应该前进的方向。

我看到过很多关于使用哪个客户端作为Cassandra的文章,但没有一个有明确的答案。

我的团队已要求我对此进行一些研究,并pros and cons针对Cassandra Client API’sJava中的每个问题提出一些建议。

正如我提到的那样,我最近参与其中的Cassandra原因还不是很清楚,为什么某些人选择Pelops client,为什么某些人与Astyanax其他客户一起去。

我了解每个Cassandra客户端的简要信息,这意味着我能够完成这项工作,并开始对Cassandra数据库进行读写。

以下是我到目前为止的信息。

卡桑德拉APIS

  • Hector(可用于生产环境)
    最稳定的Java API,已准备就绪。

  • Astyanax(Up and Comer)
    Netflix提供的干净Java API。它没有像Hector那样广泛使用,但是很可靠。

  • __
    兼容 Kundera(NoSQL ORM) JPA,当您想通过对象与Cassandra交互时,这非常方便。
    这会在某种程度上限制您,因为您将无法获得动态数量的列/名称等。但是,它的确允许您通过ORM进行移植,或将存储集中到Cassandra上以用于更多传统用途。

  • Pelops
    我只简单地使用过Pelops。这是直接的API,但似乎没有背后的动力。

  • PlayORM(没有限制的ORM?)
    我刚刚听说过。似乎正在通过引入JQL来解决传统的基于JPA的ORM与NoSQL之间的阻抗不匹配的问题。看起来很有希望。

  • 节俭(避免我!)
    这是“低级” API。

以下是我们决定的重点Cassandra Client-

  • 第一要务是:低延迟开销,Asynch API和生产环境的可靠性/稳定性。
    (例如,可以在包装客户端的DAL中使用更加用户友好的API)。

  • 连接池和分区意识是其他一些不错的功能。

  • 能够检测添加的任何新节点。
  • 以及良好的支持(如以下教务长所指出的)

有人可以对此提供一些想法吗?对于每个Cassandra Client客户的利弊,以及可以满足我的要求的客户也将有很大的帮助。

我相信,Astyanax client or New Datastax client that uses Binary protocol到目前为止,主要是我将围绕我的研究结果进行讨论。但是没有足够的信息来支持我的研究并将其呈现给我的团队。

Astyanax客户端和New Datastax客户端(使用新的Binary协议)之间的任何比较都会有很大的帮助。

这将对我的研究有很大帮助,并且会从过去使用过不同客户的不同人士那里获得很多知识。


问题答案:

Thrift越来越成为传统API:

首先,您应该意识到Thrift API不会获得新功能;它在那里是为了向后兼容,不建议用于新项目。
- 保罗

因此,我将避免使用基于Thrift的API(仅为了向后兼容而保留了Thrift)。

说的是,如果您确实需要使用基于节俭的API,那么我会选择Astyanax。Astyanax非常易于使用(与其他节俭API相比,但我的个人经验是Datastax的驱动程序更加简单)。

因此,您应该看看Datastax的
API(和GitHub repo)吗?我不确定是否有可供下载的API编译版本,但您可以使用Maven轻松构建它。另外,如果您查看GitHub存储库的提交日志,它会进行非常频繁的更新。

该驱动程序仅与CQL3配合使用,并且是异步的,但请注意,Cassandra 1.2是最早受支持的版本。

Performance
Astyanax是基于节俭的,而Datastax的驱动器是二进制协议。这是我在节俭和CQL之间可以找到的最新基准(请注意,这些绝对过时了)。但是公平地说,这些基准中显示的性能上的细微差别几乎没有关系。

**异步 支持
Datastax的 异步
支持相对于Astyanax具有绝对的优势(Netflix
尝试实现它,但决定不这样做)。

文档
我真的不能反对Netflix的Wiki。该文档非常出色,并且更新相当频繁。他们的Wiki包含代码示例,如果您需要查看工作中的代码,则可以在源代码中找到测试。我很难找到Datastax驱动程序的任何文档,但是GitHub存储库中提供了测试,因此这是一个起点。



 类似资料:
  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • URI 方法 URI() string 返回当前客户端使用的服务器地址。 SetURI 方法 SetURI(uri string) 设置当前客户端使用的服务器地址。如果你想要设置多个服务器地址,请使用 SetURIList 方法代替该方法。 URIList 方法 URIList() []string 返回当前客户端可使用的服务器地址列表。 SetURIList 方法 SetURIList(uriL

  • 客户端事件通过 SetEvent 方法进行设置。 客户端事件有两个,它们分别定义为: type onErrorEvent interface { OnError(name string, err error) }   type onFailswitchEvent interface { OnFailswitch(Client) } 因为 go 语言不需要显式实现接口的特点,所以这两

  • 创建客户端有两种方式,一种是直接使用特化的构造器函数,另一种是使用工厂构造器函数。 第一种方式返回的是具体的客户端结构体指针对象,第二种方式返回的是客户端接口对象。 使用特化的构造器函数创建客户端 特化的构造器函数有下面几个: func NewHTTPClient(uri ...string) (client *HTTPClient) func NewTCPClient(uri ...string

  • 有什么想法吗? [信息]---appengine-maven-plugin:1.8.3:endpoints_get_client_lib(default-cli)@web-service-public--- [信息] [ERROR]com.google.appengine.repackaged.com.google.api.client.http.HttpresPonseException:500

  • 客户端下载地址: windows 32位安装包 windows 64位安裝包 mac 安装包 Android App iOS App