【转】Introducing… CouchDB!

CouchDB是一款用Erlang开发的文档型数据库系统,采用JSON作为数据交换格式,并支持JavaScript视图引擎。它具备RESTful API接口,允许使用多种编程语言进行访问。此外,CouchDB还提供全文搜索功能。
Introducing… CouchDB!

pi1ot 同学提了一个问题:

javaeye上看到的“用Erlang开发的文档数据库系统CouchDB”是个什么东西,啥叫文档数据库啊

这是一个好问题,因为我也老见到这个名字,但总不知其所以然,因此,特地作了一下 research ,将我了解到的,与诸君共享。

啥叫文档数据库?

CouchDB FAQ 里面这么写:

A CouchDB document is an object that consists of named fields. Field values are lists that may contain strings, numbers and dates.

晕啊,这段虫族文翻过来,我大致这么理解:它是一个数据库,它的里面存放文档。没了!怎么能没了呢?是的,它就是没了,没有 schema, 没有 table, 没有 record,也没有 sql 。就是这样的数据库了,抓狂去吧。哈哈。其实,这个玩意并不罕见。

从概念上,和 Erlang 的 dict ,或者 Java/.Net 的 hashmap ,以及 Oracle 收购的 BerkleyDB可以模糊糊糊的看作一类东西。尤其是你用自己的生物 CPU 把 XML 和 Json 或者 Term 都模糊为“数据”的话。

HaHa,就是一个大 Hash !

那么,CouchDB 是个什么东西?

首先 couchDB 的 couch 是 Cluster Of Unreliable Commodity Hardware 的缩写,即“由不可靠的廉价硬件组成集群”(是不是听起来似曾相识呢?没错,google 提起自己的核心技术的时候,也常常这么说),单就名字而言,就能嗅到野心勃勃的味道。这个计划是由 Mysql 的工程师 Damien Katz发起的。目前,它的核心特性包括:

- a REST API using JSON instead of XML for data transport,
- a JavaScript view engine based on Mozilla Spidermonkey,
- a GNU Autotools build system supporting most POSIX systems (Noah Slater) ,
- a built-in administration interface (Christopher Lenz),
- experimental fulltext search with Lucene (Jan Lehnardt) and
- countless tweeks, enhancements and other small refinements.

如果这个列表看的你一头雾水,那太正常了,我也是哦。这里核心的关键词是 —— Json !没错,就是这个东西。所以,看到如下的 related project 列表就不足为奇了:

* CouchObject (Ruby client + JsServer for views in Ruby)
* CouchDb-Ruby
* CouchDB4J Java bindings
* Levitz - XUL based CouchDb utility client
* Erlang interface to CouchDB
* Perl interface, Net::CouchDb
* CouchDB Python Library
* CouchDB Common Lisp Library
* jQuery CouchDB Library
* Another PHP library for CouchDb

换句话说,如果以 CouchDB 为 DB ,那么你几乎可以用星球上的任何一种语言来访问它。而且,如果你语言恰好不支持(如果连 Http/Json 都不支持,我很怀疑这样的语言可以做什么用),你很快就能自己写一个出来。

其次,呃……,没有其次了(想必 Replication RESTful JavaScript Lucene 这些关键词你早已耳熟能详不用我废话了 )。

畅想下,一个特别 2.0 的技术小组,借助 CouchDB 仅仅用到 Javascript (CouchDB 就是 DB ,其中的 Javascript view 就是 SQL,Javascript json 就是 Protocol,界面?莫不是 Javascript + HTML 的一颗小菜?)就能在 CouchDB 之上,通过“纯Javascript的方式”搞出一个巨复杂的 Web 2.0 应用,开发速度以小时计哇,什么 Ror Zend ErlyWeb 的统统无视(都没有数据表,搞那些浪费生命的劳什子做甚?)。哈哈……。《如来神掌》之Web开发版秘籍在此,5毛一本。

那么,和 Erlang 有什么关系?

呃,没有说么?CouchDB 是用 Erlang 写的。实际上,还有 C(SpiderMonkey) 。

其他

关于 couchDB,infoq 有一篇很不错的介绍文章(RDBMS is not Enough)(中文翻译)。其中还提到了RDDB,是一个 CouchDB 的 Ruby 跟随项目 。
Spring XD 是一个开源的分布式数据处理平台,主要用于构建数据管道和集成任务。它提供了一种简单而高效的方式来处理实时数据流和批量数据。 ### 主要特点: 1. **模块化设计**:Spring XD 采用模块化架构,支持多种数据源、处理器和存储系统,使得用户可以灵活地组合不同的模块来满足特定的需求。 2. **分布式处理**:通过使用Apache ZooKeeper进行协调,Spring XD 能够在多个节点上分布式运行任务,从而提高系统的可扩展性和可靠性。 3. **丰富的模块库**:Spring XD 提供了大量的预定义模块,包括数据源(如Kafka、RabbitMQ)、处理器(如换、过滤)和存储系统(如HDFS、HBase)。用户也可以自定义模块来扩展功能。 4. **脚本支持**:支持使用JavaScript、Python等脚本语言编写处理器逻辑,使得开发更加灵活和快速。 5. **易于部署和管理**:Spring XD 提供了命令行工具和Web界面,方便用户进行部署、监控和管理。 6. **与Spring生态系统集成**:作为Spring家族的一部分,Spring XD 可以无缝集成到现有的Spring应用程序中,利用Spring框架的强大功能。 ### 应用场景: - **实时数据处理**:适用于需要对流式数据进行实时处理的场景,如日志分析、事件驱动的应用等。 - **ETL流程**:用于提取、换和加载数据,特别适合大数据环境下的数据集成任务。 - **微服务架构**:在微服务架构中,Spring XD 可以用来处理服务间的消息传递和数据流。 ### 安装步骤: 1. **下载并解压安装包**。 2. **配置环境变量**,确保Java和Maven已正确安装。 3. **启动ZooKeeper**,因为Spring XD依赖于ZooKeeper进行集群管理。 4. **运行Spring XD单节点模式**,可以使用`xd-singlenode`脚本启动。 5. **访问Web界面**,通常位于`http://localhost:8080/`,在这里可以进行模块的创建和管理。 ### 示例代码: 以下是一个简单的例子,展示了如何使用Spring XD创建一个数据管道,该管道从Kafka读取消息,将其换为大写,然后输出到控制台。 ```shell # 创建Kafka源模块 module create --name kafka-source --type source --definition "kafka --brokers=localhost:9092 --topic=input" # 创建换模块 module create --name uppercase-transform --type processor --definition "log --expression='payload.toUpperCase()'" # 创建控制台输出模块 module create --name console-sink --type sink --definition "log" # 创建数据管道 stream create --name uppercase-pipeline --definition "kafka-source > uppercase-transform > console-sink" # 启动数据管道 stream deploy --name uppercase-pipeline ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值