Cassandra NoSQL 数据库:开始使用
古希腊人告诉卡桑德拉的国王被阿喀琉和女王谜特洛伊的女儿的故事。她是她这一代的最美丽的女人之一。当给女由希腊神阿波罗的礼品她很快接受了,但当她后来唾弃他多情的进展,阿波罗诅咒她总是知道事情的真相,并永远不会相信任何向她讲它的人。由于她的预言的礼物,卡桑德拉预见提出该特洛伊木马的陷阱,但由于她的难以置信的诅咒,特洛伊里没有人会听她提出的警告。他们带内城墙,这匹马并不知情的情况下请入城,特洛伊的下降导致其中所隐藏的希腊士兵。卡桑德拉被作为战争奖退回到希腊阿伽门农,那里她再次预见到未来的:他 (她) 死,再次被捉,但 — — 并且,果然,他和她都被打死。
现代计算机科学的极客们告诉卡桑德拉的故事有点不同,作为 Apache 桑德拉的"NoSQL"数据库的另一项 — — 当时流行一 — — 在各种知名互联网公司(YouTube,Netflix 和其他人),大概是一个其报告实际采取按面值使用。(谣言有卡桑德拉是一个双关语另一著名女、 德尔福 Oracle。)
给开发人员,桑德软件可以只与卡桑德拉特洛伊木马程序一样的令人困惑。它具有"打开源,亚马逊的发电机及对谷歌的马力及其数据模型为基础及其分布设计的分布式、 分散、 弹性可扩展、 高可用性、 容错、 tuneably 一致、 面向列的数据库"(来源:"卡桑德拉:明确指导,"O'Reilly 媒体,2010 年,p。14).
有时我觉得希腊神话会比我的业界的更有意义。
打破所有的我们看到:
- 卡桑德拉是为了存储很多和很多和大量的数据 (数百 tb 的容量,似乎是一个常被引用的例子) 跨各种机器排列在一只戒指,而不是内说"买更大的盒子"的关系数据库思维趋势 (对于水平,而不是垂直缩放) 而构建的。
- 卡桑德拉有一种数据模型看起来就像关系数据库的数据模型表面上看,听起来有点像它同其讨论的列、 列家庭和命名的值,但行为并不喜欢它在实践中。
更多有关这次讨论的卡桑德拉一直以来发展势头良好在开发者社区作为一个值得的工具,在工具箱中,因此它看起来像是一个好主意,把我们集体的柱状凝视面向列的数据库。(有意的双关语)。
概念概述
卡桑德拉不是一个关系数据存储区,尽管其为"列-面向"一词的使用事实上,它真的不会看都像关系数据库中的东西。卡桑德拉存储架构,例如,保证各行的表中的数据是一视同仁,而不是存储"列家庭"中"keyspaces"。穷举是真的只是管理隔离屏障,多相同的方式在同一服务器上,从另一个分隔的关系数据库实例,但一个列家庭是完全不同的野兽。每个列的家庭组成的"行"确定的一个键,但在行中,任意数量的名称/值对 (列) 可以存在,与每行可以包含从列家庭内的其它行完全不同的数据元素。
在实际情况下,让我们假设我们使用卡桑德拉来存储人的集合。内的"地球"密钥库中,我们将拥有一个叫做"人民",这反过来看起来像这样的行的列家庭:
RowKey: tedneward
ColumnName:"FirstName", ColumnValue:"Ted"
ColumnName:"LastName", ColumnValue:"Neward"
ColumnName:"Age", ColumnValue:41
ColumnName:"Title", ColumnValue:"Architect"
RowKey: rickgaribay
ColumnName:"FirstName", ColumnValue:"Rick"
ColumnName:"LastName", ColumnValue:"Garibay"
RowKey: theartistformerlyknownasprince
ColumnName:"Identifier", ColumnValue: <image>
ColumnName:"Title", ColumnValue:"Rock Star"
正如您所看到的每一行都包含在概念上类似的数据,但并非所有行都将都具有相同的数据 (尽管如果差异变得太大,很可能会令人困惑的开发人员能够使用)。 存储的宠物在这里,例如,将有可能创建太多的混乱。 这就是为什么非平凡的任何应用程序可能会使用数十个或数百个不同的列的家庭。
顺便说一句,我躺在 (略) 对你说话行由组成的名称/值对 ; 它实际上是由组成的名称/值/时间戳三胞胎,但文档使它非常清楚三胞胎的时间戳部分仅用于冲突检测和是永远不会被用作应用程序逻辑的一部分的卡桑德拉。 大多数卡桑德拉文章基本上告诉新卡桑德拉开发人员可以忽略它。
这一切会更有意义,一旦你看到它的行动,所以让我们别卡桑德拉运行。
开始使用
卡桑德拉你可以做任何事情之前,您必须要安装,并由此第一关:卡桑德拉是,如广告、 一个开放源码项目,并像许多开放源码项目,它不是写在 Microsoft.net 框架的语言。 相反,卡桑德拉在 Java 中,编写,因此需要一个相对现代的 Java 运行时,您的机器上安装来执行。 卡桑德拉运行正常与 Java 6 (和,事实上,谈一谈有关的博客文章的大部分建议它),但应如果摸不到刚以及运行更快地最近发布 Java 7。
(如果您从来没有过在您计算机上安装 Java,只是插"Java 运行时环境 6 (或 7) 下载"到您的搜索引擎的选择与下拉列表所需的安装程序,要么 32 或 64 位的 Windows,这取决于你的目标操作系统。 有关的唯一其他你需要做的事情设置环境变量调用 JAVA_HOME 以指向 Java 运行时环境 (JRE) 的安装目录 — — 根据默认安装,这将是在或 java 命令 Files\Java\jre6 — — 放 JRE"bin"子目录路径上的如果不是已经。)
下一步,拉卡桑德拉主页的卡桑德拉二进制文件。 不幸的是我们 Windows 乡亲,它是只可用作。 tar.gz 文件,其中,开箱即用,Windows 还不能肯定要做什么。 数十个工具可用于 unarchive。.tar.gz 文件,这个软件,包括命令行的"gunzip"和"焦油"实用程序,如果您想要开始练习一些 Unix 傅 Windows 框上。 转储到方便的目录中,如 C:\Prg\apache-cassandra-1.1.0 (这是最新的版本中,在编写这) 卡桑德拉下载的内容。 然后,是常见的 Java 项目,您需要创建一个指向卡桑德拉的安装目录的根目录的环境变量,因此创建一个指向 C:\Prg\apache-cassandra-1.1.0 (在我的情况下) 的 CASSANDRA_HOME 环境变量。
如果你是这里的原始条件有点吓呆了,请记住 Java 项目喜欢 (这意味着我们必须使用所有平台通用的机制和环境变量是无处不在即使在 Android 上) 的多个平台上的工作。 这个积极的一面是如果你曾经使用工作卡桑德拉非 Windows 平台上,你就会做相同的安装步骤:获取 Java、 获取卡桑德拉、 unarchive 和设置环境变量。 不幸的是,它意味着我们模具不很像花式和基于 GUI 的因为我们否则可能会用到。
我们说话,澳女 !
谈到了卡桑德拉的手段,烧过到卡桑德拉的安装目录上跳跃和大都会关闭该批处理文件"cassandra.bat"的"bin"子目录中找到。 推出的"卡桑德拉 – f"("-f"会使它在前台运行),并且您应该看到类似图 1。
图 1 安装卡桑德拉的 Cassandra.bat 文件
默认情况下,卡桑德拉被配置转储数据并提交到您的文件系统,Java 解释为 C:\ 根目录下的"var"目录的日志。 这是多个 Unix-ism 中,并在配置文件中"conf/cassandra.yaml"方便地以不同的方式配置。
(方便注:一家叫做 DataStax Inc.公司 提供多功能一体安装程序包含的卡桑德拉服务器和 JRE,以及一个基于 HTML 的操作中心产品,提供免费下载。 如果您遇到困难起床它所有的设置,您可以尝试,相反。)
正在运行的卡桑德拉服务器预计 9160 端口上的传入连接,并使用端口 7199 Java 管理扩展监测,这是 Java 的粗糙相等于 Windows 管理规范。 最终,这两个端口会分别为客户端应用程序和卡桑德拉监测实用程序,可访问。
一旦卡桑德拉启动并运行您的框上,我们可以从连接到当前运行的实例,使用卡桑德拉的命令行界面,通过运行"卡桑德拉-cli.bat,"推出再次卡桑德拉"bin"目录中 (请参阅图 2)。
连接到运行卡桑德拉实例图 2
若要创建穷举,使用"创建穷举 TestKS"(这必须是一个唯一的名称),若要创建一个列家庭内的穷举,第一类"使用 <keyspace>,"然后"创建列家庭 <name>"。没有其他架构定义是必需的 — — 列家庭是从此名称/值对的集合,请记住。
要将数据插入列家族,请使用"设置"命令,可以在需要的列家庭向其中插入 ("TestCF") 的名称,要这行 ("TestKey") 列家庭使用此值 ("列") 和值的名称作为存储内的列使用的密钥那里 ("值")。 然而,因为卡桑德拉将数据存储为二进制值,您必须告诉卡桑德拉将解释为使用内置的"ascii"函数的 ASCII 值的行键、 列名称和列的值。 这意味着整个"一组"看起来像这样:
set TestCF[ascii('TestKey')][ascii('column')]=ascii('value');
检索该数据,基本上是同样的练习使用"获取"命令,像这样:
get TestCF[ascii("TestKey")];
这将返回像这样的东西:
(column=636f6c756d6e, value=76616c7565, timestamp=1338798419726000)
这表明卡桑德拉,事实上,说话胡言乱语 (至少对我们人类 — — 如果你仔细观察,这些二进制值分别为"列"和"值"的 ASCII 值)。
最难的部分是完成
我们没有时间,并只安装了卡桑德拉。 具体来说,单节点卡桑德拉群集是启动并运行,和什么也没干到尚未针对它进行编程。 幸运的是,已完成入门卡桑德拉的最困难部分。 在下一部分中,我就会开始使用.net 库卡桑德拉交谈,让它从.net 应用程序,它回,然后演示如何设置一个三节点的群集并让它飞起来拉一些数据存储和运行。
现在,虽然您编码愉快 !
Ted Neward 是 Neudesic LLC. 的体系结构顾问。他曾写过 100 多篇文章,独自撰写或与人合著过十几本书,包括《Professional F# 2.0》(Wrox,2010 年)。他是 F # MVP 和 Java 的著名的专家,并在世界各地的 Java 和.net 的会议上说。他咨询、 定期指导 — — 达到他在 ted@tedneward.com 如果你感兴趣让他来和你的团队的工作。在他博客 blogs.tedneward.com 和后面可以在 Twitter 上 Twitter.com/tedneward。
衷心感谢以下技术专家对本文的审阅:凯利莫斯