显然,实施这样的事情有多个步骤和阶段。
我在想我最终会有一个网络服务器从ios应用程序接收http json请求,然后查询cassandra后端并发回结果。我可以加载平衡和所有那些花哨的东西,并在服务器端提供逻辑层,并保持客户端应用程序轻量级。
我不确定我是否理解cassandra客户如何适应。似乎cassandra目标客户可以消除对上述方法的需求。
我看到了另一个问题和答案,但它并不清楚,也许是因为它根据需要而变化。
答案 0 :(得分:5)
iPhone应用程序不应直接连接到Cassandra后端或任何其他数据库存储。
首先,与数据库交谈通常需要调整非常特定的二进制协议(特别是对于Cassandra,二进制CQL或Thrift)。编写一个允许你的Objective-C应用程序在这个二进制协议中进行通信的适配器是主要的工作,并且可能比你工作的其他部分付出更多的代价。但是,如果将数据库隐藏在Web服务器后面,则可以从各种服务器端语言中提供的各种现有适配器中进行选择,这意味着您无需重做所有低级别的工作。您只负责一小段服务器端代码,它将转换您的REST查询并将其转发到其中一个Cassandra适配器(这些适配器提供易于使用的接口)。
其次,如果您想从手机连接到远程数据库,您的数据库服务器必须将其端口打开到整个互联网,这是一种非常糟糕的安全措施,即使您使用SSL和用户凭据也是如此。同样,如果你躲在网络服务器后面,你将会投入一层技术,这种技术已经发展了几十年,以便在公共互联网上保持安全。
最后,让你的手机直接与Cassandra对话是一种糟糕的建筑模式。当您编写在互联网上进行通信的应用程序时,您希望他们尽可能少地了解彼此,只知道如何相互通信(最好是在标准协议中)。这样,您可以替换或升级单个组件,同时保持其他所有组件相同。这可能听起来不是很多,但实际上是手机或网络浏览器不直接与数据库通信的主要原因。 (如果原则上这个设置是个好主意,那么前两个问题可以通过足够的工程努力轻松解决。)
您最初使用JSON和Web服务器建议的方法是唯一正确的方法。
答案 1 :(得分:0)
使用类似RESTful API的东西,有很多原因。 如果您的服务器IP地址发生变化,您必须更新所有客户端,如果您添加更多节点,则需要更新所有客户端,如果您决定升级cassandra并且某些功能发生变化,您的客户端将会中断,您需要更新所有客户端。 / p>