- 浏览: 1307767 次
- 性别:
- 来自: 江苏
最新评论
-
honey_fansy:
的确,不要自己的支持就说完美支持,我的就不行,别说我的不是fi ...
无js实现text-overflow: ellipsis; 完美支持Firefox -
fanchengfei:
事件长微博,欢迎转发:http://weibo.com/332 ...
《在路上 …》 写代码也需要一点演技 – python2.6 的 class decorator -
blued:
没有报错,但排版效果一点都没有 咋回事。请指教
python排版工具 -
szxiaoli:
耍人呀,效果在哪儿呀
滑动效果 -
accaolei:
这个能监到控子目录吗?,我测试了一下,发现子目录里的文件监控不 ...
windows监控目录改动
==== 启动 ====
balin couchdb # ./utils/run
参数有
-h display a short help message and exit
-V display version information and exit
-a FILE add configuration FILE to chain
-A DIR add configuration DIR to chain
-n reset configuration file chain (including system default)
-c print configuration file chain and exit
-i use the interactive Erlang shell
-b spawn as a background process(作为后台进程)
-p FILE set the background PID FILE (overrides system default)
-r SECONDS respawn background process after SECONDS (defaults to no respawn)
-o FILE redirect background stdout to FILE (defaults to $STDOUT_FILE)
-e FILE redirect background stderr to FILE (defaults to $STDERR_FILE)
-s display the status of the background process
-k kill the background process, will respawn if needed
-d shutdown the background process(关闭)
=== 配置 ===
balin couchdb # vi etc/couchdb/local_dev.ini
这里可以指定端口号等
常用的有
[httpd]
port = 12345
bind_address = 0.0.0.0
[admins]
用户名 = 密码
=== 使用 ===
http://123.123.123.123:12345/_utils/
可以创建数据库
===== python 中的使用 =====
http://123.123.123.123:12345/_utils/database.html?python-tests
以操纵这个数据库作为演示,python库有几个函数比如update([...])不能用,不能用用户名密码等等,也许要修一下...
from couchdb import client
from couchdb.client import Document
server = client.Server('http://123.123.123.123:12345/')
#打开数据库
db = server['python-tests']
#创建一条数据
doc_id = db.create({'type': 'Person', 'name': 'John Doe'})
#获取一条数据,这个doc接口和字典一样
doc = db[doc_id]
#_rev是版本,_id是uuid
doc.items()
[(u'_rev', u'1-2963977070'),
(u'_id', u'4a36f238f4facbe08762b1a958cef39e'),
(u'type', u'Person'),
(u'name', u'John Doe')]
#可以自己指定主键
db['JohnDoe'] = {'type': 'person', 'name': 'John Doe'}
db['JohnDoe'].items()
[(u'_rev', u'1-2744716443'),
(u'_id', u'JohnDoe'),
(u'type', u'person'),
(u'name', u'John Doe')]
#更新
badman = db['JohnDoe']
badman[age]=1234
db['JohnDoe'] = badman
#删除,可以用db.delete(doc)来删除
del db['JohnDoe']
#遍历
for row in db.view('_all_docs'):
print row.id
#看数据库信息
db.info()
{u'compact_running': False,
u'db_name': u'python-tests',
u'disk_size': 24381,
u'doc_count': 13,
u'doc_del_count': 0,
u'instance_start_time': u'1241518867280531',
u'purge_seq': 0,
u'update_seq': 21}
#文档可以有2进制的附件 put_attachment 用这个函数上传
# 查询,map_fun是一个js函数,emit是emit(key,value)。key,value均可是null
# web页面上有Select view查询,可以直接搜索测试
# 好像要用unicode字符 不然找不到 囧啊
db['/logo/xxx1.jpg']={"type":"logo","size":1}
db['/logo/xxx2.jpg']={"type":"logo","size":2}
db['/logo/xxx3.jpg']={"type":"logo","size":3}
db['/logo/xxx4.jpg']={"type":"logo","size":4}
map_fun = u'''
function(doc) {
if (doc.type=='logo')
emit(doc._id, doc.size);
}
'''
for row in db.query(map_fun):
print row
输出
<Row id=u'logo/xxx1.jpg', key=u'logo/xxx1.jpg', value=1>
<Row id=u'logo/xxx2.jpg', key=u'logo/xxx2.jpg', value=2>
<Row id=u'logo/xxx3.jpg', key=u'logo/xxx3.jpg', value=3>
<Row id=u'logo/xxx4.jpg', key=u'logo/xxx4.jpg', value=4>
我们还可以加上reduce函数
比如
reduce_fun = u'''
function(keys, values, rereduce) {
return sum(values)
}
'''
for row in db.query(map_fun,reduce_fun):
print row
输出
<Row key=None, value=10>
reduce 中 rereduce变量的含义如下
1. rereduce为false
* key为array,element为:[key,id],key为map function产生的key,id为Document对应id
* values为array,elements为map function产生的结果
* 比如 reduce([ [key1,id1], [key2,id2], [key3,id3] ], [value1,value2,value3], false)
2. rereduce为true
* key为null
* values为array,element为前一次reduce返回的结果
* 比如reduce(null, [中间结果1,中间结果2,中间结果3], true)
这里有一些map/reduce演示的例子,比较好懂
http://labs.mudynamics.com/wp-content/uploads/2009/04/icouch.html
==== Creating Views ====
View 可以理解为索引了 不过这个索引不是实时的...
接着上文的例子
db["_design/test"]={
"views":
{
"all": {
"map": "function(doc) { if (doc.type == 'logo') emit(null, doc) }"
},
"size_large_than_2": {
"map": "function(doc) { if (doc.size && parseInt(doc.size)>2) emit(null,doc) }"
},
"total_size": {
"map": "function(doc) { emit(null,parseInt(doc.size)) }",
"reduce": "function(keys,values) { return sum(values) }"
}
}
}
然后刷新
http://123.123.123.123:12345/_utils/database.html?python-tests
可以看到 select views中多了test
也可访问
http://123.123.123.123:12345/python-tests/_design/test/_view/all
可以加上limit这一类参数
http://123.123.123.123:12345/python-tests/_design/test/_view/all?limit=2
点着看看
http://123.123.123.123:12345/python-tests/_design/test/_view/all?limit=2&skip=1
这样可以做分页,不过(http://stackoverflow.com/questions/312163/pagination-in-couchdb)
"""A simpler method of doing this is to use the skip parameter to work
out the starting document for the page, however this method should be
used with caution. The skip \parameter simply causes the internal
engine to not return entries that it is iterating over. While this
gives the desired behaviour it is much slower than finding the first
document for the page by key. The more documents that are skipped, the
slower the request will be."""
所以最好配合下面的startkey之类的来用skip
类似参数还有
排序 descending=false
开始结束 startkey="abc"&endkey="abcZZZZZZZZZ"
可以用docid startkey_docid=null
group=true 用法有的复杂 看这里,是用来合并的结果的
http://jchrisa.net/drl/_design/sofa/_show/post/markov_chains_using_couchdb_s_g
key可以的复杂的key比如
The query startkey=["foo"]&endkey=["foo",{}] will match most array
keys with "foo" in the first element, such as ["foo","bar"] and
["foo",["bar","baz"]]. However it will not match
["foo",{"an":"object"}]
点着看看
python中可以这样访问
for row in db.view('_design/test/_view/all'):
print row.id
输出
logo/xxx1.jpg
logo/xxx2.jpg
logo/xxx3.jpg
logo/xxx4.jpg
又如
for row in db.view('_design/test/_view/size_large_than_2'):
print row
<Row id=u'logo/xxx3.jpg', key=None, value={u'_rev': u'1-3347158087', u'_id': u'logo/xxx3.jpg', u'type': u'logo', u'size': 3}>
<Row id=u'logo/xxx4.jpg', key=None, value={u'_rev': u'1-1107796651', u'_id': u'logo/xxx4.jpg', u'type': u'logo', u'size': 4}>
==== 网络资源 ====
这里有一篇中文的简介,可以看看作为背景知识
http://hi.baidu.com/freeway2000/blog/item/8f76ed11f26bc8c1a6ef3f53.html
CouchDB: The Definitive Guide
http://books.couchdb.org/relax/
=== 注 ===
1.
couchdb 根据网上的测试表明
写入速度 比 mysql 慢4倍
创建索引速度 比 mysql 慢50倍
2.
couchdb 只写入不删除
需要定期做整理
类似垃圾回收的copy+删除
需要预留大量磁盘空间
3.
索引不是实时的
你可能看到的是旧的数据
我的个人看法:
单单看性能,couchdb的确很不理想
但是couchdb可以把数据以view的方式展现,要什么,就新建什么样的view
这种随心所欲索引方式,在不少应用的场合,
通过view的方式把这种查询结果持久化,
可以大大减少了把传统意义上的重复且相似查询.
举一个例子,
比如好友广播,
每一个人创建一个view,
也许可以吧...
评论
2 楼
JeffreyHsu
2009-07-27
速度太慢了,令人发指,而且不能排序
新鲜玩意,完全不可以实际应用
新鲜玩意,完全不可以实际应用
1 楼
Arbow
2009-05-06
引用
couchdb 根据网上的测试表明
写入速度 比 mysql 慢4倍
创建索引速度 比 mysql 慢50倍
写入速度 比 mysql 慢4倍
创建索引速度 比 mysql 慢50倍
确实挺慢的,也许是速度原因阻碍了国内的发展,感觉对于不大不小的公司,技术方案评估上,速度性能很看重。从这点上大家会选择key value db,而不是document db
引用
但是couchdb可以把数据以view的方式展现,要什么,就新建什么样的view
这种随心所欲索引方式,在不少应用的场合,
通过view的方式把这种查询结果持久化,
可以大大减少了把传统意义上的重复且相似查询
这种随心所欲索引方式,在不少应用的场合,
通过view的方式把这种查询结果持久化,
可以大大减少了把传统意义上的重复且相似查询
感觉这种需求没有被挖掘出来,大家还是适合使用sql来获取所需数据,不会考虑这种陌生的东西。
发表评论
-
纪念一个死掉的机器人
2011-04-20 01:45 6005很久以前, 于是, 写过一个天气预报的gtalk机器人, 虽然 ... -
jquery插件elastic, 让输入框自适应文字的高度
2011-03-30 20:59 4779好久没写技术了, 看到赖总的 Pipe——Python 的中 ... -
《在路上 …》 为什么我喜欢DELL, 讨厌苹果
2010-12-31 05:00 6477看了D前辈的文章Apple 的保修不靠谱http://www ... -
《在路上 …》 聊天笔记: 如何调动一个人的积极性去做一件事情
2010-12-24 08:41 5944前两天跟暴风影音的童小军老师( http://42qu.co ... -
《在路上 …》 上网冲浪
2010-12-09 02:31 4766这年头, 做得好那是孤芳自赏, 做得不好那是敝帚自珍, 要是 ... -
《在路上 …》 金山卫士开源 , 人生很多感慨
2010-12-03 04:31 6149最近写日记少了很多, ... -
《在路上 …》 互联网. 人物志
2010-11-24 12:50 3972曾几何时, 我在豆瓣上写过一篇日记, 说要写一个我那圈互联网 ... -
《在路上 …》 写代码也需要一点演技 – python2.6 的 class decorator
2010-11-24 12:50 4157写通用的回复类, 原本 ... -
《在路上 …》 做人需要一点演技
2010-11-24 12:50 3832唐骏是说:"我是一 ... -
《在路上 …》 42区介绍演讲- 在家的排练的MP3
2010-11-24 12:50 3688点此收听, 不多说了 订阅到Google 分享到 豆瓣 ... -
《在路上 …》 韩剧情迷
2010-11-24 12:50 1383一边看着韩剧, 一边流着眼泪, 然后觉得这样很假, 又 ... -
《在路上 …》 互联网. 人物志
2010-11-24 12:31 1540曾几何时, 我在豆瓣上写过一篇日记, 说要写一个我那圈互联网 ... -
《在路上 …》 写代码也需要一点演技 – python2.6 的 class decorator
2010-11-24 12:31 1478写通用的回复类, 原本 ... -
《在路上 …》 做人需要一点演技
2010-11-24 12:31 1441唐骏是说:"我是一 ... -
《在路上 …》 42区介绍演讲- 在家的排练的MP3
2010-11-24 12:31 1509点此收听, 不多说了 订阅到Google 分享到 豆瓣 ... -
《在路上 …》 韩剧情迷
2010-11-24 12:31 1145一边看着韩剧, 一边流着眼泪, 然后觉得这样很假, 又笑了笑 ... -
《在路上 …》 互联网. 人物志
2010-11-24 11:50 929曾几何时, 我在豆瓣上写过一篇日记, 说要写一个我那圈互联网 ... -
《在路上 …》 写代码也需要一点演技 – python2.6 的 class decorator
2010-11-24 11:50 825写通用的回复类, 原本 ... -
《在路上 …》 做人需要一点演技
2010-11-24 11:50 864唐骏是说:"我是一 ... -
《在路上 …》 42区介绍演讲- 在家的排练的MP3
2010-11-24 11:50 988点此收听, 不多说了 订阅到Google 分享到 豆瓣 ...
相关推荐
《CouchDB权威指南》是一本深入探讨CouchDB数据库系统的专著,旨在为读者提供全面、详尽的CouchDB知识。CouchDB是一种基于文档的分布式数据库系统,采用JSON作为数据格式,JavaScript作为查询语言,并且支持多版本...
根据提供的文件信息,我们可以推断出这是一份关于CouchDB的权威指南,该文档为中文版,并且是完整的两百多页版本。下面将基于这些信息生成相关的CouchDB知识点。 ### CouchDB简介 CouchDB是一款面向文档、分布式且...
通过《CouchDB权威指南》,你将学会如何通过CouchDB的RESTful Web接口来使用它,此外你还会熟悉CouchDB的一些主要特性,比如简单的文档的CRUD(创建、读取、更新、删除); 高级的MapReduce,部署优化等更多的内容...
### CouchDB权威指南知识点概述 #### 一、CouchDB简介 CouchDB(Cluster of Unstructured Data Base)是一款开源的、面向文档的NoSQL数据库系统。它由Apache软件基金会维护,采用JSON来存储数据,HTTP协议进行数据...
《Beginning CouchDB》这本书由Joe Lennon编写,旨在为初学者提供一套全面的指南,帮助他们掌握CouchDB的基本概念和技术细节。 #### 二、CouchDB的特点 1. **文档存储**:CouchDB采用JSON文档作为数据存储格式,这...
CouchDb的三位创建者向您展示了如何将此面向文档的数据库用作独立的应用程序框架或用于大量分布式应用程序。
Apache CouchDB是一个开源的、基于文档的分布式数据库系统,它采用了JSON作为数据格式,并使用JavaScript进行查询和数据处理。在2.3.1版本中,CouchDB继续提供了一流的可扩展性和灵活性,适用于各种应用程序,特别是...
CouchDB是一款开源的文档数据库管理系统,以其独特的JSON数据模型、RESTful API和分布式系统设计而闻名。在深入探讨CouchDB源码之前,我们首先理解CouchDB的基本概念和工作原理。 CouchDB的核心是基于JSON...
学习couchDB 的入门教程
《初识CouchDB》是一本面向专业人士的专业书籍,它详细介绍...总的来说,《初识CouchDB》是理解、掌握并运用CouchDB的宝贵资源,无论你是对NoSQL感兴趣,还是寻求一种新的数据管理解决方案,这本书都提供了全面的指南。
sofa-CouchDB 是 CouchDB 的独立博客,使用 CouchDB 的书来做主要内容,这方便了所有用来在这博客上交流他们的想法,并且里面提供了很多帮助指导,这都是 HTML,Javascript 和 CouchDB 的结晶。目前支持任何人在上面...
CouchDB是一款开源的数据库系统,属于Apache软件基金会的一个项目。它是一种NoSQL数据库,以文件存储形式使用JSON作为数据存储格式,并采用JavaScript作为查询语言。CouchDB具有灵活的API,支持MapReduce和HTTP等...
CouchDB是一款开源的、基于文档的分布式数据库系统,它以JSON格式存储数据,并使用JavaScript作为查询语言。Python中的CouchDB模块是Python与CouchDB服务器交互的接口,允许开发者使用Python编写代码来操作CouchDB...
安装过程相对简单,下载安装包后按照官方指南进行配置。配置文件通常位于`etc/couchdb/local.ini`,可以通过修改该文件设置端口、认证和日志记录等选项。 三、RESTful API CouchDB提供了基于HTTP的RESTful API,...
Fabric 1.4基于couchdb环境搭建步骤,以及基于couchdb的区块链多字段数据查询
CouchDB 是一个开源的面向文档的数据库管理系统,可以通过 RESTful JavaScript Object Notation (JSON) API 访问。术语 “Couch” 是 “Cluster Of Unreliable Commodity Hardware” 的首字母缩写,它反映了 CouchDB...