我现在正在研究沙发基地,我对'桶'和'vbucket'这个术语的官方描述感到很困惑,有人能解释什么是桶或vbucket吗?有什么不同?最好做一些类比并给出一些例子.
Couchbase文档说"磁盘持久性使您能够执行备份和还原操作,并使您能够扩展比内置缓存层更大的数据集",但我似乎无法使其工作.
我正在三节点集群上测试Couchbase 2.5.1,为存储桶配置了总共56.4GB的内存.在大约124,000,000个100字节的对象 - 大约12GB的原始数据之后 - 它停止接受额外的放置.已配置1个副本.
是否有一个魔法"继续前进并溢出到磁盘"开关,我错过了?错误日志中没有可疑条目.
更新到Android L之后,我遇到了这样的错误,不过之前(在Android 4.4 Nexus 7 2013上)一切都很好:
java.lang.NoSuchFieldError: no "I" field "mConnectionPtr" in class "Landroid/database/sqlite/SQLiteConnection;" or its superclasses
at com.couchbase.touchdb.TDCollateJSON.nativeRegisterCustomCollators(Native Method)
at com.couchbase.touchdb.TDCollateJSON.registerCustomCollators(TDCollateJSON.java:11)
at com.couchbase.lite.android.AndroidSQLiteStorageEngine.open(AndroidSQLiteStorageEngine.java:46)
at com.couchbase.lite.Database.open(Database.java:909)
at com.couchbase.lite.Manager.getDatabase(Manager.java:228)
at com.explain.messenger.model.utils.CBHelper.init(CBHelper.java:55)
Run Code Online (Sandbox Code Playgroud)
尝试创建数据库后发生执行:
manager = new Manager(new AndroidContext(appContext),
Manager.DEFAULT_OPTIONS);
Database db = manager.getDatabase("db_name"); // exception here
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决它?
我可以将在Android上运行的CouchBase数据库复制到CouchDB(1.1)服务器吗?我想在Android上试用couchbase,并在Amazon EC2上安装了Couch DB.
这个问题不一定是Couchbase 2.0开发的具体预览,但我认为它可能会帮助人们调查新的Couchbase产品.
我正在寻找有关数据建模的建议.我们正在调查Couchbase,以便将其用于实时分析.
但是,我找不到任何关于如何最好地模拟现实世界数据的文档.
我将提出一个场景,如果社区可以帮助我或讨论如何建模的一些想法,那将非常有用吗?
请注意,这不代表我们的产品,我不是要求人们为我们解决我们的建模问题更倾向于讨论
让我们假设客户在特定日期/时间做出产品购买,产品与他们的信息,如ID,名称,描述和价格,购买时的日期进行.
最初的要求是能够计算两个日期之间的所有购买.任何1天的购买量可能超过10万 - 这是一项非常大的业务;)
如果任何语法不正确请告诉我 - 欢迎所有建议/帮助.
如果我们将数据建模为类似的东西(可能完全不正确):
购买产品
{
"_id" : "purchase_1",
"_rev" : "1-1212afdd126126128ae",
"products" : [
"prod_1" : {
"name" : "Milk",
"desc" : "Semi-skimmed 1ltr",
"price" : "0.89"
},
"prod_7568" : {
"name" : "Crisps",
"desc" : "Salt and Vinegar",
"price: "0.85"
}
]
"date" : "2012-01-14 14:24:33"
}
{
"_id" : "purchase_2",
"_rev" : "1-1212afdd126126128ae",
"products" : [
"prod_89001" : {
"name" : "Bread",
"desc" : "White thick sliced", …
Run Code Online (Sandbox Code Playgroud) 任何人都可以向我解释为什么以下不起作用:
假设以下文档结构:
{
"_id": "520fb089a6cb538b1843cdf3cca39a15",
"_rev": "2-f96c27d19bf6cb10268d6d1c34799931",
"type": "nosql",
"location": "AZ",
"date": "2012/03/01 00:00:00",
"amount": 1500
}
Run Code Online (Sandbox Code Playgroud)
并且Map函数定义如下:
function(doc) {
var saleDate = new Date(doc.date);
emit([doc.location,saleDate.getFullYear(),saleDate.getMonth()+1],doc.amount);
}
Run Code Online (Sandbox Code Playgroud)
并使用内置_sum
功能的减速机.
当你执行它(使用group = true)时,你会得到如下结果:
{"rows":[
{"key":["AZ",2012,2],"value":224},
{"key":["AZ",2012,3],"value":1500},
{"key":["WA",2011,12],"value":1965},
{"key":["WA",2012,1],"value":358}
]}
Run Code Online (Sandbox Code Playgroud)
现在,如果您将查询更改为以下内容:
http://127.0.0.1:5984/default/_design/nosql/_view/nosql_test?group_level=2
Run Code Online (Sandbox Code Playgroud)
你得到这样的结果:
{"rows":[
{"key":["AZ",2012],"value":1724},
{"key":["WA",2011],"value":1965},
{"key":["WA",2012],"value":358}
]}
Run Code Online (Sandbox Code Playgroud)
所以考虑到这一点,如果我想在2011年找到"WA"的所有销售,我不能执行这样的事情:
http://127.0.0.1:5984/default/_design/nosql/_view/nosql_test?group_level=2&key=["WA",2011]
Run Code Online (Sandbox Code Playgroud)
这个例子取自NoSQL磁带上的有用视频.
http://nosqltapes.com/video/understanding-mapreduce-with-mike-miller
对于Cassandra,假设复制因子为1(即数据集的两个副本),则最少需要三个节点来启用具有强一致性的写入.Couchbase似乎没有这个要求,至少我没有在任何地方找到它.尽管如此,Couchbase仍然建议生产系统至少使用三个节点.
我发现的唯一动机是(1)双节点系统中的单节点故障会产生单点故障,(2)双节点系统在扩展到第三个节点时需要更加努力,而不是三节点系统(我假设这是因为重新平衡).
没有任何动机对我来说特别引人注目:
原因(1)感觉有点像说双磁盘RAID-1没用,只有三磁盘RAID-6(一个数据,两个校验和)是可以接受的.然而,RAID-1非常流行(远远超过三磁盘RAID-6:es),通常被认为是相对安全的.据推测,丢失节点将导致管理员快速行动,因此风险应该是短暂的.
原因(2)对我来说似乎更加短暂.当添加第三个节点时,两个节点需要更加努力地工作.尽管如此,这只是一个问题,并且大多数应用程序每天都有负载变化,可以完成重新平衡的调整.
所以我想知道是否有任何其他原因可以避免双节点Couchbase集群,假设这两个节点能够很好地承载负载?
我在maven项目中使用java.我正在使用couchbase 2.3.1,但在尝试解决此问题时,我回滚到2.2.8无济于事.
我得到的问题是,当我确实到达我的couchbase集群时,我看到了很多这样的事情:
java.lang.RuntimeException: java.util.concurrent.TimeoutException
at com.couchbase.client.java.util.Blocking.blockForSingle(Blocking.java:75)
at com.couchbase.client.java.CouchbaseBucket.upsert(CouchbaseBucket.java:359)
at com.couchbase.client.java.CouchbaseBucket.upsert(CouchbaseBucket.java:354)
Run Code Online (Sandbox Code Playgroud)
以下是我的couchbase环境的设置:
CouchbaseEnvironment: {sslEnabled=false, sslKeystoreFile='null', sslKeystorePassword='null', queryEnabled=false, queryPort=8093, bootstrapHttpEnabled=true, bootstrapCarrierEnabled=true, bootstrapHttpDirectPort=8091, bootstrapHttpSslPort=18091, bootstrapCarrierDirectPort=11210, bootstrapCarrierSslPort=11207, ioPoolSize=24, computationPoolSize=24, responseBufferSize=16384, requestBufferSize=16384, kvServiceEndpoints=1, viewServiceEndpoints=1, queryServiceEndpoints=1, searchServiceEndpoints=1, ioPool=NioEventLoopGroup, coreScheduler=CoreScheduler, eventBus=DefaultEventBus, packageNameAndVersion=couchbase-java-client/2.2.8 (git: 2.2.8, core: 1.2.9), dcpEnabled=false, retryStrategy=BestEffort, maxRequestLifetime=75000, retryDelay=ExponentialDelay{growBy 1.0 MICROSECONDS, powers of 2; lower=100, upper=100000}, reconnectDelay=ExponentialDelay{growBy 1.0 MILLISECONDS, powers of 2; lower=32, upper=4096}, observeIntervalDelay=ExponentialDelay{growBy 1.0 MICROSECONDS, powers of 2; lower=10, upper=100000}, keepAliveInterval=30000, autoreleaseAfter=2000, bufferPoolingEnabled=true, tcpNodelayEnabled=true, mutationTokensEnabled=false, socketConnectTimeout=1000, dcpConnectionBufferSize=20971520, dcpConnectionBufferAckThreshold=0.2, dcpConnectionName=dcp/core-io, callbacksOnIoPool=false, queryTimeout=75000, viewTimeout=75000, kvTimeout=2500, …
Run Code Online (Sandbox Code Playgroud) 我的应用程序是在同一个存储桶中存储多种文档类型.我知道这不是一个好习惯,但我对我可以在我的服务器上创建多少桶有限制,目前还没有解决方法.文档的前缀是它们的类型,所以当我得到一个文档时,我只需要连接前缀和id来获取密钥,我就可以进行密钥查找.
我需要创建一个报告,从多个文档类型中提取信息.
我的地图看起来像这样:
function(doc, meta) {
var getStep = function(stepName, exit, mapper) {
if (meta.id.indexOf(stepName) !== -1) {
var hotelId = parseInt(meta.id.replace(stepName + '_', ''));
if (hotelId > 0) {
var result = {
hotelId: hotelId,
exit: exit
};
if (mapper !== undefined) {
mapper(result);
}
return result;
}
}
return null;
};
var photos = getStep('PHOTOS', 7);
if (photos != null) {
emit(photos.hotelId, photos);
}
var pricing = getStep('PICR', 5);
if (pricing != null) {
emit(pricing.hotelId, pricing);
}
var …
Run Code Online (Sandbox Code Playgroud) 我开始使用 Couchbase Mobile。我最感兴趣的功能(目前)是PULL
复制(保持移动数据与后端数据库同步)。
我按照使用 Docker 使用 Couchbase Mobile 进行开发中描述的步骤进行了操作,并在本地部署了 Couchbase 服务器 (enterprise-6.5.0) 和同步网关 (2.7.0-enterprise)。我已经添加了beer-sample
数据库(有 ~8400 个文档),现在我正在尝试将它复制到一个 android 应用程序上。我自定义了Userprofile Couchbase Mobile Android项目,并将其指向我的本地同步网关。我有一段代码要复制,如下所示:
public static void startPullReplication() {
Log.i("Pull", "Start pull beer-sample");
URI url = null;
try {
url = new URI(String.format("%s/%s", "ws://10.0.1.7:4984", beerSampleDbName));
} catch (URISyntaxException e) {
e.printStackTrace();
}
ReplicatorConfiguration config =
new ReplicatorConfiguration(beerSampleDatabase, new URLEndpoint(url)); // <1>
config.setReplicatorType(ReplicatorConfiguration.ReplicatorType.PULL); // <2>
config.setContinuous(true); // <3>
config.setAuthenticator(new BasicAuthenticator("admin", "password")); // <4>
// config.setChannels(Arrays.asList("channel." + …
Run Code Online (Sandbox Code Playgroud)