我是 Aerospike 的新手。我的命名空间有多个集合。我试图在 aerospike dB 命名空间中为不同的集合设置不同的 TTL。
我不想使用分配给命名空间的默认 ttl,而是想为每个集合设置它。
我的配置
namespace test {
replication-factor 1
memory-size 1G
default-ttl 0
}
Run Code Online (Sandbox Code Playgroud)
我提到了此链接https://docs.aerospike.com/server/operations/configure,其中指出可以设置特定的记录策略。
namespace <name> { # Define namespace record policies and storage engine
storage {} # Configure persistence or lack of persistence
set {} # (Optional) Set specific record policies
}
Run Code Online (Sandbox Code Playgroud)
但我不确定应该使用哪个字段来设置每组的 ttl。比如说,我在这个“测试”命名空间中有两个名为 - 的集合order,并且name我希望它们的 ttl 分别为 2 小时和 6 小时。任何帮助,将不胜感激。
提前致谢
我有一个 Set,它有两个 Bin(pId 是 long ,值是列表),并且列表索引应用于值。现在我想从所有记录的值列表中删除指定值。
我用过ListOperation.removeByValue,它可以工作,但是当记录大小超过 100000 条记录时,速度并不快。循环操作大约需要 11 秒。
WritePolicy clientWritePolicy = new WritePolicy();
clientWritePolicy.commitLevel = CommitLevel.COMMIT_MASTER;
clientWritePolicy.recordExistsAction = RecordExistsAction.UPDATE;
clientWritePolicy.expiration = 300;
Statement statement = new Statement();
statement.setIndexName("values_index");
statement.setNamespace("test");
statement.setSetName("setTest");
statement.setFilter(Filter.contains("values", IndexCollectionType.LIST, value));
QueryPolicy queryPolicy = new QueryPolicy();
RecordSet recSet = client.query(queryPolicy, statement);
recSet.forEach(rec->{
client.operate(clientWritePolicy, rec.key,ListOperation.removeByValue("values",Value.get(value), ListReturnType.NONE));
});
Run Code Online (Sandbox Code Playgroud)
我如何优化这段代码?是否还有其他类似 use 的解决方案UDF?
更新1:我在文件中编写了以下函数lua:
function removeListByValue(rec,v)
local l = list()
for value in list.iterator(rec["values"]) do
if(value ~= v) then
list.append(l, value)
end
end …Run Code Online (Sandbox Code Playgroud) 我正在尝试安装 Aerospike REST Gateway,在运行第一个命令 ./gradlew build (并等待 2 小时)后,它显示如下内容:
2142 tests completed, 1660 failed
> Task :test FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///home/andalabs/aerospike-rest-gateway/build/reports/tests/test/index.html
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Get more help at …Run Code Online (Sandbox Code Playgroud) 我正在使用LDT地图,并且最初得到了这个错误.
com.aerospike.client.AerospikeException: Error Code 1424: LDT-Sub Record Create Error
Run Code Online (Sandbox Code Playgroud)
我能够ldt-enabled true在in 的帮助下删除它,aerospike.conf
但现在我遇到了
com.aerospike.client.AerospikeException: Error Code 1422: LDT-Sub Record Open Error
Run Code Online (Sandbox Code Playgroud)
代码段:
for (Entry<String, Map<String, Object>> myLdtBin: myLdtMap.entrySet()) {
LargeMap lmap = client.getLargeMap(myWritePolicy, myKey, myLdtBin.getKey() , null);
lmap.put(myLdtBin.getValue()); //<-- Error here
}
Run Code Online (Sandbox Code Playgroud)
有什么指针吗?
我有一个正在运行的Aerospike服务器,在一组中有大约36,000条记录.所有我存储的都是这个集合的几个箱子.我已经配置了我的aerospike.conf文件来保存磁盘上的数据:
namespace default {
replication-factor 2
memory-size 4G
default-ttl 0
storage-engine device {
file /opt/aerospike/data/default.dat
filesize 2T
data-in-memory true
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我的/opt/aerospike/data/default.dat文件在我的系统中列为大约2TB:
/opt/aerospike/data# ls -lh
total 10M
-rw------- 1 root root 2.0T Jun 5 19:01 default.dat
Run Code Online (Sandbox Code Playgroud)
我的问题是:
当我在Aerospike中使用的数据现在很小时,为什么这个.dat文件必须是2TB?
我的硬盘限制为78GB,为什么我的Ubuntu系统不能让我没有驱动器空间错误?
系统磁盘空间看起来很好:
df -h --total
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 79G 4.2G 72G 6% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 2.0G 8.0K 2.0G 1% /dev
tmpfs 395M 424K 395M 1% /run
none 5.0M 0 5.0M …Run Code Online (Sandbox Code Playgroud) 有没有办法以编程方式确定Aerospike记录的存储大小?client.info或get()中的元数据似乎都没有.
我正在处理一个包含记录列表的 avro 文件,并对每条记录执行 client.put 到我本地的 Aerospike 商店。
由于某种原因,放置一定数量的记录是成功的,而对于其余的记录则不然。我正在这样做——
client.put(writePolicy, recordKey, bins);
失败调用的相关值是 -
命名空间=测试
集合名称 = 测试集
用户密钥 = some_string
写入策略=空
垃圾箱-
是用户:1
prof_loc:530049,530046,530032,530031,530017,530016,500046
rfm:白金
store_browsed:some_string
store_purch:some_string
城市ID:空
日志片段 -
com.aerospike.client.AerospikeException: Error Code 4: Parameter error
at com.aerospike.client.command.WriteCommand.parseResult(WriteCommand.java:72)
at com.aerospike.client.command.SyncCommand.execute(SyncCommand.java:56)
at com.aerospike.client.AerospikeClient.put(AerospikeClient.java:338)
可能是什么问题?
我正在查看Aerospike的文档。并发现对于存储主键,Aerospike使用散列,并且散列指向BTree,而bTree包含指向实际记录的指针。据我所知,Redis只使用哈希(为了解决冲突,他们维护一个哈希列表)。哈希指向实际记录。
Aerospike使用Btree有什么优势?这不是意味着通过其主键Aerospike访问记录将花费O(logn)吗?而redis只需要O(1)。
我可能是错的,但是我从文档中了解到了全部。有人可以在这个话题上发表更多意见吗?
当我尝试使用 ruby 客户端写入 aerospike 时,出现以下异常:-
细节:-
Aerospike version:- 4.3
Client: [Ruby] aerospike - 2.4.0
namespaces: NS1, NS2, NS3
Run Code Online (Sandbox Code Playgroud)
代码(导致异常):-
client = Aerospike::Client.new('aerospike:3000')
key = Aerospike::Key.new('NS2', 'set name', 'this is the key')
data = { 'record' => 1 }
client.put(key, data) # this line raises the exception
Aerospike::Exceptions::Aerospike: Unsupported Server Feature
Run Code Online (Sandbox Code Playgroud)
如果我将密钥中的 NS2 更改为 NS1,则不会引发异常。
我们有一个用例,其中可能有大量对同一密钥的请求。Aerospike 根据主键的哈希将请求路由到分区。可以进行额外的分区和重新平衡以支持更高的流量。但是,Aerospike如何处理单个按键导致热点的情况呢?
对于这种情况,有更好的数据库解决方案吗?
强文本直到证书经理每个吊舱都工作良好,如 aerospike 文档所示。但在安装操作员时,操作员吊舱会发生崩溃循环退避。
安装操作员使用:
git clone https://github.com/aerospike/aerospike-kubernetes-operator.git
git checkout 2.5.0
cd aerospike-kubernetes-operator/helm-charts
helm install aerospike-kubernetes-operator ./aerospike-kubernetes-operator --set replicas=3
Run Code Online (Sandbox Code Playgroud)
Pod 运行:
PS C:\Users\B.Jimmy\aerospike-kubernetes-operator-1.0.0> kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
cert-manager cert-manager-576c79cb45-xkr88 1/1 Running 0 4h41m
cert-manager cert-manager-cainjector-664f76bc59-4b5kz 1/1 Running 0 4h41m
cert-manager cert-manager-webhook-5d4fd5cb7f-f96qx 1/1 Running 0 4h41m
default aerospike-kubernetes-operator-7bbb8745c8-86884 1/2 CrashLoopBackOff 36 (59s ago) 159m
default aerospike-kubernetes-operator-7bbb8745c8-jzkww 1/2 Error 36 (5m14s ago) 159m
kube-system aws-node-7b4nb 1/1 Running 0 21h
kube-system aws-node-llnzh 1/1 Running 0 21h
kube-system …Run Code Online (Sandbox Code Playgroud) aerospike kubernetes kubernetes-helm cert-manager amazon-eks
我已经通过 java 客户端将 Json 字符串插入 Aerospike Bin 中,并通过 java 检索它,效果很好,工作正常。
现在我有兴趣在 aql bin 中查看我的 Json 字符串,但我只能看到字符串的一半,例如
+------------------------------------------------ -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------+----------------------------------------------------+ | abcList
------------------------------------------------- -------------------------------------------------- --+----------------------------------------------------+ | “[{“abc”:假,“abc”:“7871248”,“abc”:1423114706392,“abc”:1423114706392,“abc”:5,“abc”:“12345”,“abc”:0,” OriginalCartItemSequenceNumber":0,"abc":false,"abc":"","sourceCustomerId":nu | "d016cf2a-cf8f-435a-b9d5-de486da4737b" | +------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------------+------ ----------------------------------+ 1 行一组(0.001 秒)
如果你在某个时间点后观察,我只会得到点。那么我怎样才能得到所有结果,是否需要进行任何配置更改?
请有人帮助我
我们正在尝试找到一个具有索引支持的内存数据库,我们可以将它用于我们的应用程序.我们正在研究Aerospike,Apache Ignite,Geode,Voltdb.没有太多区别,每个人都声称速度快,并且有很好的社区支持.
其中,Aerospike和VoltDB是基于C/C++的,Apache Ignite和Geode是基于Java的.
考虑到数据库在性能方面几乎没有什么选择,而且很难测试哪个数据库对我们的生产有更好的作用,试图找出内存数据库的性能是否也取决于它是否是基于java或基于c/c ++的.考虑垃圾收集问题是非常频繁的,并且很难根据您的用例(可能会在一段时间后改变)正确调整它,基于java的dbs是否会处于劣势.
谢谢
aerospike ×13
java ×3
nosql ×3
amazon-eks ×1
autoscaling ×1
b-tree ×1
caching ×1
cert-manager ×1
client ×1
database ×1
geode ×1
gradle ×1
ignite ×1
kubernetes ×1
lua ×1
rest ×1
ruby ×1
spring-boot ×1
voltdb ×1