问题标签 [couchdb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
couchdb - CouchDB 文档建模原则
我有一个问题,我一直试图回答一段时间,但无法弄清楚:
您如何设计或分割 CouchDB 文档?
以博客文章为例。
半“关系”的方法是创建一些对象:
- 邮政
- 用户
- 评论
- 标签
- 片段
这很有意义。但是我正在尝试使用 couchdb(出于所有原因,它很棒)来模拟相同的东西,而且这非常困难。
那里的大多数博客文章都为您提供了如何执行此操作的简单示例。他们基本上以相同的方式划分它,但是说您可以为每个文档添加“任意”属性,这绝对是不错的。所以你会在 CouchDB 中有这样的东西:
- 发布(在文档中带有标签和片段“伪”模型)
- 评论
- 用户
有些人甚至会说你可以把评论和用户扔在那里,所以你会有这个:
p>这看起来非常好,很容易理解。我也了解您如何编写仅从所有 Post 文档中提取评论的视图,以将它们放入评论模型中,与用户和标签相同。
但后来我想,“为什么不把我的整个网站放在一个文档中呢?”:
p>您可以轻松地制作视图以找到您想要的内容。
那么我的问题是,您如何确定何时将文档划分为较小的文档,或者何时在文档之间建立“关系”?
我认为它会更加“面向对象”,并且更容易映射到值对象,如果它像这样划分:
p>...但随后它开始看起来更像是一个关系数据库。很多时候我继承了一些看起来像“整个站点在一个文档中”的东西,所以用关系来建模它更加困难。
我已经阅读了很多关于如何/何时使用关系数据库与文档数据库的内容,所以这不是这里的主要问题。我只是想知道,在 CouchDB 中建模数据时应用什么好的规则/原则。
另一个例子是 XML 文件/数据。一些 XML 数据的嵌套深度超过 10 层,我想使用相同的客户端(例如 Ajax on Rails 或 Flex)来可视化它,我将从 ActiveRecord、CouchRest 或任何其他对象关系映射器呈现 JSON。有时我会得到整个站点结构的巨大 XML 文件,如下所示,我需要将其映射到值对象以在我的 Rails 应用程序中使用,这样我就不必编写另一种序列化/反序列化数据的方式:
p>所以一般的 CouchDB 问题是:
- 您使用什么规则/原则来划分文件(关系等)?
- 可以将整个网站放在一个文档中吗?
- 如果是这样,您如何处理具有任意深度级别的序列化/反序列化文档(如上面的大型 json 示例或 xml 示例)?
- 或者你不把它们变成 VO,你只是决定“这些太嵌套到对象关系映射,所以我将使用原始 XML/JSON 方法访问它们”?
非常感谢您的帮助,如何用 CouchDB 划分数据的问题让我很难说“从现在开始我应该这样做”。我希望能尽快到达那里。
我研究了以下站点/项目。
...但他们仍然没有回答这个问题。
couchdb - couchdb 中的唯一约束
是否有任何技术/建议来强制执行独特的约束?是的,我们可以创建唯一的密钥,但我们不能更改密钥和密钥,而且这种方法不适合复杂的验证(单独的唯一登录名、单独的唯一电子邮件等)
例如,帐户应具有唯一的登录名和电子邮件。从此字段派生密钥将导致不一致:
看起来不错,但是:
糟糕,现在我们有 2 个登录帐户:“mary”
database - 什么是 couchdb,我应该使用什么以及如何使用它?
我听到了很多关于couchdb的信息,但是在阅读了一些关于它的文档之后,我仍然不明白为什么要使用它以及如何使用它。
你能帮我解开这个谜吗?
visual-studio - Visual Studio - 编辑位于数据库中的源代码
我正在为 Apache CouchDB 构建类似于 Server Explorer 的东西。必要的事情之一是能够编辑 CouchDB 视图定义,这些定义在 CouchDB 中是 JavaScript 函数。
如何欺骗 Visual Studio 使用我的对象来检索和保存 JavaScript 函数的内容,但仍然使用它的其余部分 - 我对编辑器本身很满意,并且无意编写自己的编辑器/语言服务等。后者将比该项目所保证的更大的努力
编辑
经过更多的挖掘,我仍然被卡住了。这是我所知道的:IVsUIShellOpenDocument
interface 提供了一种OpenStandardEditor
可用于打开标准 Visual Studio 编辑器的方法。作为参数之一,此方法采用指向文档数据对象的 IUnknown 接口的指针。该对象应该实现 MSDN 上许多地方描述的多个接口。
Visual Studio SDK 还提供了文档数据对象的“示例”实现VsTextBufferClass
。我可以创建这个类的一个实例,当我将指向实例的指针传递给OpenStandardEditor
我可以看到我的编辑器时,它似乎工作正常。
当我尝试实现我自己的实现相同接口的类时(IVsTextBuffer
, VsTextBuffer
, IVsTextLines
)OpenStandardEditor
方法返回成功,但是 VS 在调用editor.Show()
时因访问冲突而崩溃。
我怀疑 VsTextBufferClass 还实现了一些其他接口,但不是以 C# 方式,而是以良好的旧 COM 方式。我只是不知道是哪一个。
有什么想法吗?
couchdb - SQL COUNT(*) 聚合函数的 CouchDB 等效项是什么?
是的,我是进入 CouchDb Map/Reduce 世界的 SQL 骑师 (sorta)。我以为我已经弄清楚了 CouchDB 数据集的 COUNT(*) SQL 聚合器函数的等价物如何:
地图:
减少:
我认为有效,返回类似:
......但不是真的。当我添加一条记录时,这个计数变化很大。有时计数实际上会减少,这非常令人惊讶。难道我做错了什么?也许我不完全理解最终一致性的概念?
python - 非关系数据存储有哪些用例?
我正在考虑将 CouchDB 用于一个项目,将 GAE 应用程序引擎数据存储用于另一个项目。对于关系的东西,我倾向于使用 postgres,尽管我更喜欢 ORM。
无论如何,哪些用例最适合非关系数据存储?
python - 我应该为 CouchdB 使用哪个 Python 客户端库?
我开始尝试使用 CouchDB,因为它看起来是我们遇到的某些问题的完美解决方案。鉴于所有工作都将在一个没有遗留依赖项的全新项目上进行,您建议我使用哪个客户端库,为什么?
如果我们使用的操作系统有任何重叠,这会更容易。FreeBSD 的端口集合中只有py-simplecouchdb可用,但该库的项目网站说要使用CouchDBKit。这些都没有随 Ubuntu 一起提供,它只随CouchDB一起提供。由于这两个操作系统没有共同的库,我可能会从源代码安装一些东西(如果我有时间,希望将包提交给 Ubuntu 和 FreeBSD 人员)。
对于那些感兴趣的人,我想使用 CouchDB 作为在各种服务之间传递的数据的方便中间存储位置——想想消息总线系统,但不那么正式。例如,我们有守护程序下载和解析网页,然后将有趣的位发送给其他守护程序以进行进一步处理。很多这些对象在运行时之前都是不明确的(“这里有一些 HTML,加上一组元数据,以及一些要在其上运行的操作”)。与其将其序列化为临时本地网络协议或将其粘贴在 PostgreSQL 中,我更愿意使用为此目的设计的东西。我们目前在这个角色中使用NetWorkSpaces,但它几乎没有 CouchDB 的广泛支持或用户社区。
couchdb - 了解键值存储
我试图围绕 CouchDB 和 Cassandra 等键值存储。我理解它们为什么有用,但就它们如何替换像 MySql 这样的 RDBMS 而言,我不明白。
假设这是我需要存储的内容:
然后我需要找到所有蓝色的汽车。
Key-Value 存储如何使用值查询键?我读了一些可以使用 map-reduce 的地方,但是查看了一些项目的来源,我找不到一个例子。
让我知道我是否问对了问题。
python - 哪个键:值存储与 Python 一起使用?
因此,我正在研究用于 Python 的各种 key:value(其中 value 严格来说是单个值或可能是一个对象)存储,并找到了一些有希望的存储。我目前还没有具体要求,因为我处于评估阶段。我正在寻找什么是好的,什么是坏的,这些东西处理得好或不好的极端情况是什么,等等。我相信你们中的一些人已经尝试过它们,所以我很想听听你的发现/问题/ETC。在 Python 的各种 key:value 存储上。我主要看:
memcached - http://www.danga.com/memcached/ python 客户端:http://pypi.python.org/pypi/python-memcached/1.40 http://www.tummy.com/Community/software/python-内存缓存/
CouchDB - http://couchdb.apache.org/ python 客户端:http ://code.google.com/p/couchdb-python/
东京暴君 - http://1978th.net/tokyotyrant/ python 客户端:http ://code.google.com/p/pytyrant/
Lightcloud - http://opensource.plurk.com/LightCloud/基于 Tokyo Tyrant,用 Python 编写
Redis - http://redis.io/ python 客户端:http: //pypi.python.org/pypi/txredis/0.1.1
MemcacheDB - http://memcachedb.org/
所以我开始使用简单的计数来生成数字键和“A short string of text”的值进行基准测试(只需插入键并读取它们):
memcached:CentOS 5.3/python-2.4.3-24.el5_3.6,libevent 1.4.12-stable,memcached 1.4.2,默认设置,1 gig 内存,每秒 14,000 次插入,16,000 秒读取。没有真正的优化,很好。
memcachedb 声称每秒插入 17,000 到 23,000 次,每秒读取 44,000 到 64,000 次。
我也想知道其他人如何在速度方面有所提高。