我读了一些关于托管(又称云)数据库的事情.例如,Cloudant提供托管的CouchDB数据库,或者Cassandra.io提供托管的Cassandra.我理解为什么这些服务解决了一些问题.
我的问题:为什么这些服务有效?我想我在自己的服务器上(或在云托管平台上的某个地方)托管我自己的应用程序,并使用这些服务之一来存储我的数据.对于每个数据库请求(读取或写入),我需要通过互联网支付完整的往返(假设我的应用程序不与我的数据库云提供程序使用的托管在同一个地方).为什么这些往返不会杀了我?在考虑SQL时,每个查询只会为网络花费另外x*10ms,而不需要花费任何时间.
这个问题怎么解决了?或者这些服务不适合需要快速响应的应用程序,并且只能用于延迟不成问题的数据处理?
使用标准的CouchDB视图索引,我可以灵活地对缺点与新鲜度进行内省.如何获得Cloudant dbcopy功能的类似功能?
stale=okstale=update_afterstale=false)我可以将DB update_seq与设计文档进行比较update_seq,可以update_seq=true在视图查询中或从中获取GET /db/_design/foo/_info.
BigCouch的数据库分区和多个服务器略微蒙上阴影.例如update_seq是复合材料,应仅在公差范围内进行比较; stale=false可能会选择不同的碎片,stale=ok而碎片可能或多或少是最新的; 虽然没有办法获取update_seq所有节点(或stale=false查询将选择的特定节点),但可以通过快速发出多个/db/_design/foo/_info查询来欺骗它.在这里有额外的碎片/分区内省会很好,但上面仍然适用于我的目的.
dbcopydbcopy具有大致相同的"最终一致性"特征.查询链式数据库中的文档大致类似于查询原始视图group=true&stale=ok.哪个好,大部分时间都没问题.但是文档没有提供以下内容的任何指示:
dbcopy状态?例如,数据库是否认为自己是最新的,或者是否在IOQ中轮流查看更改?如果它不是最新的,大致有多陈旧?dbcopy(在stale=update_after或中stale=false)的优先级.例如,我想要的东西POST /origin_db/_design/foo/_view/bar/_dbcopy将强制dbcopy立即将减少的结果推送到DB(可选择首先更新原点视图).dbcopy机制或dbcopy机制错过了一些文档),是否可以检测到这些?怎么纠正?有dbcopy"重置按钮"吗?因此,删除文档时,实际上会永久保留元数据.对于像cloudant这样每月存储成本的托管服务,我想完全清除已删除的文档.
我在某处读到了一个设计模式,你在视图中使用dbcopy将文档放入"当前"数据库,然后定期删除过期的数据库.但我找不到这篇文章,我不太明白数据库命名如何工作.cloudant客户端如何始终知道"当前"数据库名称?
我正在使用Cloudant开始一个项目.这是一个简单的日志记录系统,因此我可以跟踪我的应用程序的使用情况.
我的文档看起来像这样:
{
app:'应用名称',
输入:'页面视图| 登录| 等等.',
所有者:'email_of_the_user',
设备:'iphone | android | 等等.',
日期:'yyyy-mm-dd'
}
我试图做一些地图缩减和分面搜索,但到目前为止找不到我想要的结果.
我想计算由同一所有者,日期(yyyy-mm-dd)和app分组的不同文档的数量.
[例如,如果同一个人在同一天登录应用程序两次或20次,则只会计算一次.我想计算每天有多少单个用户使用应用程序,无论日志类型或他使用的设备是什么.
如果它是SQL,假设文档的每个键都是一列,我会查询如下:
SELECT app,date,count(*)FROM LOGS group by date,owner,app
蚂蚁的结果将是这样的:
'App1','2015-06-01',
200'App1','2015-06-02',
232'App2','2015-06-01',
142'App2','2015-06-02' ,120
如何使用Cloudant/CouchDB获得相同的结果?
我正在建立一个典型的分页,允许用户点击特定的页码并查看结果(类似于谷歌搜索结果视图).我正在使用cloudant搜索API.cloudant搜索API提供限制选项但不提供跳过选项.如果用户在第1页上并点击第4页,我该如何跳过n个结果?
我可以看到分页是使用书签实现的.这是否意味着我需要首先通过向搜索API发送3个额外的请求来获取第4页的书签?
对于CouchDB,您可以创建多个视图和/或多个设计文档.
在同一设计文档中对视图进行分组或将每个视图保留在自己的设计文档中是否更好?
我有一些 groovy 代码可以向服务器发出 GET 请求:
import groovyx.net.http.RESTClient
import static groovyx.net.http.ContentType.*
import groovyx.net.http.HTTPBuilder
def server = new RESTClient( 'https://myaccount.cloudant.com' )
// the id contains a forward slash, i.e. xxxx/yyyy
response = server.get (path: 'aaaa/xxxx%2Fyyyy',
contentType: JSON, requestContentType: JSON)
Run Code Online (Sandbox Code Playgroud)
但是,以下内容正在发送到服务器:
"GET /aaaa/xxxx%252Fyyyy HTTP/1.1"
Run Code Online (Sandbox Code Playgroud)
什么时候应该是这样:
"GET /aaaa/xxxx%2Fyyyy HTTP/1.1"
Run Code Online (Sandbox Code Playgroud)
似乎 groovy 正在对路径进行编码 - 我该如何防止这种情况?
我需要从 PouchDB 数据库中获取所有文档。谁能告诉我如何从回调函数中获取“文档”?我想将它作为响应对象返回,并在控制台输出中获取它。
var db = new pouchdb('meetups');
db.allDocs({
include_docs: true,
attachments: true
}).then(function (err,res) {
console.log("Result..."+res);
res.json({'users':res});
}).catch(function (err) {
console.log(err);
});
Run Code Online (Sandbox Code Playgroud) 我正在使用 Spark Streaming 创建一个系统来丰富来自 cloudant 数据库的传入数据。例子 -
Incoming Message: {"id" : 123}
Outgoing Message: {"id" : 123, "data": "xxxxxxxxxxxxxxxxxxx"}
Run Code Online (Sandbox Code Playgroud)
我的驱动程序类的代码如下:
Incoming Message: {"id" : 123}
Outgoing Message: {"id" : 123, "data": "xxxxxxxxxxxxxxxxxxx"}
Run Code Online (Sandbox Code Playgroud)
Enrichment Job 的代码如下: class EnrichmentJob:
from Sample.Job import EnrichmentJob
from Sample.Job import FunctionJob
import pyspark
from pyspark.streaming.kafka import KafkaUtils
from pyspark import SparkContext, SparkConf, SQLContext
from pyspark.streaming import StreamingContext
from pyspark.sql import SparkSession
from kafka import KafkaConsumer, KafkaProducer
import json
class SampleFramework():
def __init__(self):
pass
@staticmethod
def messageHandler(m): …Run Code Online (Sandbox Code Playgroud) 如何向 Cloudant 用户数据库中的用户添加角色?(_users) 我无法使用 Google 或 Cloudant Docs 解决这个问题。我看到有人提到 Cloudant _user 数据库,但尚未找到如何使用它。
我用nodejs和express构建了一个API。和
const { CloudantV1 } = require('@ibm-cloud/cloudant');
const { BasicAuthenticator } = require('ibm-cloud-sdk-core');
Run Code Online (Sandbox Code Playgroud)
我可以使用 service.putCloudantSecurityConfiguration() 创建 ApiKey 并分配角色。
service.getSecurity() 的结果如下:
cloudant: {
'apikey-01beebbe10ae46ad9e86cc16a2937939': [ '_replicator', '_writer', '_reader' ],
'apikey-3044abd26f324792a8be5809a5521400': [ '_writer', '_reader' ],
'apikey-8d98aa26f1d246f6b736f313bd45d630': [ '_writer', '_reader' ],
'apikey-231cdadcf38945e9ab48125adddc0fdb': [],
'apikey-7ec3ebdd9c5b4aa691685fae251a255d': [ '_writer', '_reader' ],
'apikey-061e3a0ae05d486583dda500ee6685f6': [ '_writer', '_reader' ],
'apikey-0324472243bd4c0da6ea6e9022e102c8': [ '_writer', '_reader' ]
Run Code Online (Sandbox Code Playgroud)
}
当我查看 service.getSessionInformation(); 时 结果,我看到:
"result": {
"userCtx": {
"roles": [],
"name": "apikey-01beebbe10ae46ad9e86cc16a2937939" …Run Code Online (Sandbox Code Playgroud)