这是什么原因?
com.aerospike.client.AerospikeException: java.io.EOFException
at com.aerospike.client.async.SelectorManager.processKey(SelectorManager.java:184) [aerospike-client-3.0.24.jar:?]
at com.aerospike.client.async.SelectorManager.runCommands(SelectorManager.java:108) [aerospike-client-3.0.24.jar:?]
at com.aerospike.client.async.SelectorManager.run(SelectorManager.java:69) [aerospike-client-3.0.24.jar:?]
Caused by: java.io.EOFException
at com.aerospike.client.async.AsyncConnection.read(AsyncConnection.java:127) ~[aerospike-client-3.0.24.jar:?]
at com.aerospike.client.async.AsyncSingleCommand.read(AsyncSingleCommand.java:48) ~[aerospike-client-3.0.24.jar:?]
at com.aerospike.client.async.SelectorManager.processKey(SelectorManager.java:164) ~[aerospike-client-3.0.24.jar:?]
... 2 more
Run Code Online (Sandbox Code Playgroud) 从Redis发展成为一些数据结构后,我正在寻找具有良好磁盘/ SSD性能的其他解决方案.我最近发现Aerospike似乎在SSD环境中表现出色.
饥饿最多的结构之一是大约100.000个Redis集,每个集可以包含多达10,000个字符串.每个字符串介于10到30个字符之间.
这些集主要用于存在/唯一性检查.
对这些进行建模的最佳方法是什么?我通常会看到两个选项:*将redis设置为Aerospike lset *模型,将每个值分别设置为一组.
除了这个选择,100.000 Redis集用作键上的分区.出于本地化的原因,在Aerospike中进行类似的分区/命名空间可能是有意义的.但是,我很确定Aerospike中"命名空间"的概念并不用于这种关键分区.在Aerospike中执行此操作的正确方法(如果有的话),还是不需要?
我试图做一个使用aerospike的基准测试,例如,假设我想测试存储文件可能是在airospike中的JSON并对couchbase做同样的测试,我可以用什么样的工具/方法来测试aerospike和couchbase.
可以说我在JAVA中有以下模型
class Shape {
String type;
String color;
String size;
}
Run Code Online (Sandbox Code Playgroud)
并说我有以下基于上述模型的数据.
Triangle, Blue, Small
Triangle, Red, Large
Circle, Blue, Small
Circle, Blue, Medium
Square, Green, Medium
Star, Blue, Large
Run Code Online (Sandbox Code Playgroud)
我想回答以下问题
Given the type Circle how many unique colors?
Answer: 1
Given the type Circle how many unique sizes?
Answer: 2
Given the color Blue how many unique shapes?
Answer: 2
Given the color Blue how many unique sizes?
Answer: 3
Given the size Small how many unique shapes?
Answer: …Run Code Online (Sandbox Code Playgroud) 所以我希望将现有的redis数据建模为aerospike.我们的一个要求是能够获得给定用户的所有密钥.例如,假设我们有诸如的键<id>:<timestamp>.现在,在某个时间点,我需要获取给定的所有密钥,我需要id在aerospike命名空间(已编制索引)中的所有键上搜索前缀,以获取所有<id>:<timestamp>键的值.想知道这是否可能,如果是,如何.谢谢.
我试图为每个页面或其他事件(如点击等)计算不同客户端的独特访问者.我打算做的是为GUID分配一个唯一的基于cookie的GUID,然后为每个事件调用SADD.redis键将是SET_ [EVENTID]
如果我只想要用户数量,我可能会使用PFADD,但我的应用程序还需要知道谁是唯一用户
但问题是如果有太多的EVENT或太多的用户,那么SADD将在内存中结束大量的用户ID我们期望每小时1000k +用户事件,所有客户端,事件数量也将超过100+
我想要一个意见是redis正确的存储选择.由于请求数量庞大,任何传统的RDBMS方法都不起作用
我不确定是否有任何其他存储可以帮助像Aerospike
我想要有一个 aerospike-server 节点的多个实例,以便实现负载平衡,因为我向服务器发出了如此多的请求,我收到一条错误消息“错误代码 22:此时不允许操作”。
我假设拥有更多 aerospike 服务器节点,我可以减轻一个节点上的负载,从而完成更多操作?我只是不知道从哪里开始。
我需要这些节点全部位于一台主机本地。任何帮助都会很棒。
我的网络知识不是很好所以请原谅我
我的 Docker 文件:
FROM aerospike/aerospike-server
MAINTAINER "xxxx"
ADD aerospike.conf /etc/aerospike/
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
version: "3"
services:
aerospike-server:
image: amc
container_name: aerospike-server
ports:
- "3000:3000"
- "3001:3001"
- "3002:3002"
- "3003:3003"
aerospike-amc:
image: mrbar42/aerospike-amc
container_name: aerospike-amc
ports:
- "8081:8081"
Run Code Online (Sandbox Code Playgroud)
aerospike.conf 网络节
network {
service {
address any
port 3000
# Uncomment the following to set the `access-address` parameter to the
# IP address of the Docker host. This will the allow the server to …Run Code Online (Sandbox Code Playgroud) 我们有多个客户端配置为与这个空中飞行节点集群通信.既然我们已经从我们所知道的所有客户端中删除了配置,那么仍有一些读/写请求进入该集群,如AMC所示.
我查看了/var/log/aerospike/aerospike.log中生成的日志文件,但无法获取任何信息.
更新
@kporter的答案中提到的netstat命令显示连接数,状态为ESTABLISHED,TIME_WAIT,CLOSE_WAIT等.但是,这并不意味着这些连接当前正用于获取/设置操作.如何获取目前正在进行空中飞行操作的IP?
更新2(已解决)
正如评论提到@ kporter的答案,罪魁祸首客户端上的tcpdump命令仍然显示正在发送到这是没有更多的在配置文件中引用的塞集群包.即使该集群的AMC没有显示任何更多的读/写TPS,也会发生这种情况.
我后来发现nginx在客户端重新启动服务后停止了这一点.请注意,客户端中的配置文件现在引用了一个新的aerospike集群,并且在nginx重启后,发送到该集群的数据包没有停止.这很奇怪,但确实有效.
在备份文件中有很多编码值.如何取回原始数据.
例如,有
+ d q+LsiGs1gD9duJDbzQSXytajtCY=
Run Code Online (Sandbox Code Playgroud)
这是格式的["+"] [SP] ["d"] [SP] [{digest}] [LF]何处q+LsiGs1gD9duJDbzQSXytajtCY=是关键摘要.如何从中获取主键?
Map和List值也表示为不透明的字节值.我们如何恢复原始地图和列表?
如果我想从备份中进行CSV转储,我目前需要完成所有这些操作.
在Aerospike中,如何在存储在map类型容器中的嵌套对象中添加新的键/值对?
例如,我有一个类型映射的容器,需要将其存储在键/值对下面。
{
"a" : "apple",
"b" : "ball",
"c" : { "d" : "dog", "e" : "elephant" },
"f" : { "g" : { "h" : "horse" } },
"i" : { "j" : "jackal", "k" : { "l" : "lion", "m" : "monkey" } }
}
Run Code Online (Sandbox Code Playgroud)
现在,我想针对键“ k”更新一个现有的嵌套对象,以添加另一个键值对,如下所示。
"k" : { "l" : "lion", "m" : "monkey", "n" : "nest" }
Run Code Online (Sandbox Code Playgroud)
最终结果应如下所示。
{
"a" : "apple",
"b" : "ball",
"c" : { "d" : "dog", "e" : "elephant" …Run Code Online (Sandbox Code Playgroud)