gpt4 book ai didi

php - 在 Cassandra 中设计/使用用户表来创建和登录帐户

转载 作者:行者123 更新时间:2023-12-05 01:21:04 24 4
gpt4 key购买 nike

我是 Cassandra 的新手,我首先设计一个用于帐户注册和登录的简单用户表。这很简单:

行键:time();列:电子邮件、姓名、密码。

关于这个简单的结构,我有一个问题:

这里的行键是随机的。如何使用 php 使用电子邮件和密码登录?

最佳答案

Cassandra 采用基于查询的建模方法,因此您可以在不同的表中拥有相同的冗余、非规范化数据……这没关系。您需要牢记这一点。

注册和登录实际上是两件不同的事情,因此您需要将它们分开。从长远考虑查询和访问模式,将用户帐户数据与凭据数据分开可能是有意义的,因为凭据可能会发生变化。

CREATE TABLE users (
userid uuid,
firstname text,
lastname text,
email text,
created_date timestamp,
PRIMARY KEY (userid)
);

CREATE TABLE usercredentials (
email text,
password text,
userid uuid,
PRIMARY KEY (email)
);

这样,当用户更改密码时,他们不会影响整个 users 表。此外,大多数用户更改电子邮件的频率、偶尔的删除(以及因此生成的墓碑)应该没什么大不了的。这将不允许 SELECT * FROM usercredentials WHERE email=? AND password=? 查询才能正常工作,因此您必须改为 SELECT password FROM usercredentials WHERE email=?,但这消除了旧密码闲置并导致潜在问题的可能性。你可以争论在 email 上分区和在 password 上聚类,但这真的没有意义,因为一封电子邮件永远不会同时有多个密码(尽管你可以设计一个额外的表来存储密码历史记录)。

为了跟踪登录,我建议这样:

CREATE TABLE logins (
time timestamp,
userid uuid,
email text,
PRIMARY KEY (userid, time)
);

这将通过 useridtime 的组合为您的行设置关键字。这里的不同之处在于,userid 是分区键,因此每个用户的所有登录都将存储在一起。 time 充当聚类键,因此您可以对其执行 ORDER BY 操作。 email 在这里是一个有效载荷字段,这是有道理的,因为您可以看到它,同时还可以无缝地将可能已更改其电子邮件地址的用户的登录信息分组在一起。这应该涵盖基础表格。

对于编码方面,CodeIgniter-PHPCassa项目可能对您有所帮助。

关于php - 在 Cassandra 中设计/使用用户表来创建和登录帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26217868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com