有没有一种解决方案可以将用户的数据存储在一个cassandra表中,只使用不同的非主值?

9ceoxa92  于 2023-10-18  发布在  Cassandra
关注(0)|答案(1)|浏览(145)

试图设计一个cassandra数据库表来存储用户的个人资料信息-用户名,姓名,移动的号码和电子邮件ID。username用作群集键,而我希望限制一个用户使用的移动的号码或电子邮件ID不应被另一个用户使用。
是否有任何选项来限制每个列的不同值或任何解决方案?
试图设计一个具有两个不同的非主要值的模式。Cassandra并不是只在主键上提供DISTINCT。

sd2nnvve

sd2nnvve1#

你表达了2个不同的查询,它将是2个不同的表。(99%是Cassandra)。
您将不得不创建一个专用表来查找移动的。在查找表中,您可以将电子邮件作为聚类键来验证配对。

CREATE TABLE users_profile_by_email(
  email    TEXT,
  mobile   TEXT,
  username TEXT,
  PRIMARY KEY((email))
);

CREATE TABLE users_profile_check_mobile(
  mobile TEXT,
  email  TEXT,
  PRIMARY KEY((mobile), email)
);

插入2个用户(一个批处理语句的良好用法示例)

BEGIN BATCH
INSERT INTO users_profile_by_email(email, mobile, username) VALUES ('[email protected]', '111-111-1111', 'user1');
INSERT INTO users_profile_check_mobile(mobile, email) VALUES ('111-111-1111', '[email protected]');
APPLY BATCH;

BEGIN BATCH
INSERT INTO users_profile_by_email(email, mobile, username) VALUES ('[email protected]', '222-222-2222', 'user2');
INSERT INTO users_profile_check_mobile(mobile, email) VALUES ('222-222-2222', '[email protected]');
APPLY BATCH;

一个用户正在注册.

  • 电子邮件是否已在使用中?*
select count(email) as email_count
from users_profile_by_email 
where email='[email protected]'
  • 移动的是否已被使用?*
select count(mobile) as mobile_count
from users_profile_check_mobile 
where mobile='222-222-2222';
  • email/mobile有效吗?*
select count(*) as mobile_count
from users_profile_check_mobile 
where mobile='222-222-2222' 
and email='[email protected]';

相关问题