相关疑难解决方法(0)

Cassandra:生成一个唯一的ID?

我正在研究分布式数据库.我试图生成一个唯一的ID将作为列族主键的.

我阅读了一些关于使用Java进行此操作的文章,UUID但似乎存在碰撞的可能性(即使它非常低).

我想知道是否有办法根据时间生成一个唯一的ID?

uuid cql cassandra cql3

25
推荐指数
3
解决办法
3万
查看次数

卡桑德拉列键自动增量

我试图了解Cassandra以及如何构建我的列族(CF),但由于习惯了关系数据库,所以很难.

例如,如果我创建简单的usersCF并尝试插入新行,如何在MySQL中创建增量键?

我看到了很多例子,你只需要输入用户名而不是唯一的ID,这会有点意义,但是如果我希望用户拥有重复的用户名呢?

另外我如何根据我的理解进行搜索cassandra不支持>运算符,所以类似的东西select * from users where something > something2不起作用.

可能最重要的问题是关于分组的问题?我是否需要检索所有数据,然后使用我正在使用的任何语言过滤它?我认为这会大大减慢我的系统速度.

所以基本上我需要一些简短的解释如何开始使用Cassanda.

cassandra nosql

18
推荐指数
2
解决办法
2万
查看次数

水平扩展聊天记录工作者

我已经考虑了很多,但无法想出一个我很满意的解决方案.

基本上这就是问题:记录100k + Chats(有些慢,有些更快)进入cassandra.因此保存userId,channelId,timestamp和消息.

Cassandra已经支持水平扩展,我在这里没有问题.

现在,我读取这些聊天的软件通过TCP(IRC)完成.对于顶级1k通道,通常会有300条消息/秒,而单个IRC连接无法处理我的实验.

我现在想要构建的是记录器的多个实例(使用Docker/Kubernetes)并在它们之间共享负载.理想情况下,如果我有4个工人和1k个聊天(例如).他们每个人都会加入至少250个频道.我说至少是因为我想要可选的冗余,所以我可以在同一个聊天中有2个记录器,以确保没有消息丢失.重复项没有问题,因为所有消息都有唯一的ID.

现在,我将如何最好地动态分享工人之间加入的当前渠道.我想避免拥有主人或控制点.还应该很容易添加更多的工人,然后减少其他工人的负担.

有关这种行为的好文章吗?也许已经定义了好的概念或协议?就像我说的,我想避免另一个中央控制点,所以没有rabbitmq,redis或其他什么.

编辑:我已经研究过像Raft Consensus Algorithm这样的东西了,但是我认为这没有意义,因为我不希望我的客户就共享状态达成一致,而是将它们之间的状态"平等地"分开.

parallel-processing tcp distributed-computing docker kubernetes

6
推荐指数
1
解决办法
162
查看次数

cassandra 计数器,原子获取和设置

cassandra 是否支持计数器的原子获取和设置?IE

create table c(id int, value counter, primary key (id));

update update c set value=value+1 where id=1;
Run Code Online (Sandbox Code Playgroud)

好的,现在我的柜台准备好了。但是我希望能够从多个服务器读取一个唯一值,每个服务器都获得一个不同的值,例如

select value from c where id=1; 
Run Code Online (Sandbox Code Playgroud)

atomic cassandra

5
推荐指数
0
解决办法
2762
查看次数

如何确保数据库中不存在生成的id

我想为实体生成唯一的id并将实体存储在Cassandra数据库中(仅当已生成id的实体不存在时).

在id生成之后,我检查db是否有任何具有相同id的实体.如果不是,则保存实体.MyService类的示例代码:

synchronized (MyService.class) {
    do {
        id = generateId();
    } while (myDao.find(id) != null);
    sampleObject.setId(id);
    myDao.create(sampleObject);
}
Run Code Online (Sandbox Code Playgroud)

在MyDao中保存我正在使用的实体:

cassandraOperations.insert(sampleObject);
Run Code Online (Sandbox Code Playgroud)

确保数据库中不存在已生成的id的最佳实践是什么?我觉得这个同步块不是最有效的解决方案.或者也许还有其他方法可以确保只有在数据库中没有具有相同ID的实体时才插入实体?

java concurrency cassandra spring-boot

0
推荐指数
1
解决办法
558
查看次数