我需要您的帮助来设计简单登录服务的结构。它包含大约100.000.000个客户,每个客户可以拥有大约10个不同的登录名 - 这导致1.000.000.000个不同的登录名。Cassandra - 登录服务的数据设计解决方案
每个客户包含以下数据:
- 一对多登录名字符串,最多20 UTF-8长
- ID只要角色 - 一个客户只有一个ID
- 性别
- 出生日期
- 名
- 密码MD5
登录过程需要通过登录名找到用户。
Cassandra中的数据被复制 - 这是在单次调用中获取所有必需的登录数据所必需的。我们通常也期望低写入流量和繁重的读取流量 - 应避免读取数据的往返行程。
下面,我描述了两个可能的Cassandra的数据模型基于例如:我们有两个用户,第一用户有两种登录和第二个用户有三个登录
A)窄身行
- 行密钥包含登录名 - 这是主要搜索条件
- 登录数据被复制 - 每个可能的登录信息存储为包含所有用户数据的单个行 - 单个客户的10个登录信息创建10行,每行有不同的密钥和相同的c ontent
// first 3 rows has different key and the same replicated data [email protected] { id: 1122 gender: MALE birthdate: 1987.11.09 name: Alfred Tester pwd: e72c504dc16c8fcd2fe8c74bb492affa }, [email protected] { id: 1122 gender: MALE birthdate: 1987.11.09 name: Alfred Tester pwd: e72c504dc16c8fcd2fe8c74bb492affa }, [email protected] { id: 1122 gender: MALE birthdate: 1987.11.09 name: Alfred Tester pwd: e72c504dc16c8fcd2fe8c74bb492affa }, // two following rows has again the same data for second customer [email protected] { id: 1133 gender: MALE birthdate: 1997.02.01 name: Manfredus Maximus pwd: e44c504ff16c8fcd2fe8c74bb492adda }, [email protected] { id: 1133 gender: MALE birthdate: 1997.02.01 name: Manfredus Maximus pwd: e44c504ff16c8fcd2fe8c74bb492adda }
B)行由字母前缀分组
- 行数是有限的 - 用于从登录名例如第一个字母
- 每一行包含良性与行的所有登录键“a”包含所有以“a”开头的登录
- 数据可能不平衡,但我们避免了行数过薄 - 这可能会带来积极的表现冲击(??)
- 以避免超列各行直接包含列,其中列名是用户登录名和列值实物序列化形式的相应的数据(我想有是人类可读的)
a { [email protected]:"1122;MALE;1987.11.09; Alfred Tester;e72c504dc16c8fcd2fe8c74bb492affa", [email protected]@xyz.de:"1122;MALE;1987.11.09; Alfred Tester;e72c504dc16c8fcd2fe8c74bb492affa", [email protected]@xyz.de:"1122;MALE;1987.11.09; Alfred Tester;e72c504dc16c8fcd2fe8c74bb492affa" }, m { [email protected]:"1133;MALE;1997.02.01; Manfredus Maximus;e44c504ff16c8fcd2fe8c74bb492adda" }, r { [email protected]:"1133;MALE;1997.02.01; Manfredus Maximus;e44c504ff16c8fcd2fe8c74bb492adda" }
哪种解决方案更好,尤其是读取性能?你有更好的主意吗?
你有什么“更好”的标准?性能,清晰度,可扩展性等? – DNA
仅限速度和速度。 –