java - 使用键值存储构建应用程序的设计策略
问题描述
键值存储,NoSQL 的一种,如何用于构建常用的应用功能?
- 存储用户信息(登录信息)
- 存储与用户或其他实体相关的文档和/或“实体”
使用 Key-Value 存储而不是典型的文档 NoSQL 的建模应用程序的一般策略是什么?
例如,如果您只有此 API 来连接数据存储:
put(String bucketName, String, byte[] value);
byte[] get(String bucketName, String key);
List<String> getKeys(String bucketName, String prefix, int maxKeys);
delete(String bucketName, String key);
解决方案
如here所述,此问题的一个答案。
是像这样建模信息:
[key] [value]
artist:1:name AC/DC
artist:1:genre Hard Rock
artist:2:name Slim Dusty
artist:2:genre Country
这里的问题是,如果底层数据存储不支持事务,那么可能会出现一组数据丢失的情况。然而,一个好的最终用户应用程序设计理解存储的每个数据,例如,艺术家实体实际上存储了多个值,那么这将不是问题。这里的关键是应用程序必须“理解”正在使用的数据库是一个键值存储,就像 DNS 注册的设计方式一样,每条记录都是单独保存而不是批量保存,这将是通常的情况,因为大多数 KV 存储可以'不处理批处理操作。
推荐阅读
- c# - 无法将类型“Microsoft.Extensions.Hosting.IHost”隐式转换为“Microsoft.Extensions.Hosting.IHostBuilder”
- latex - 在latex tikz中的矩形内的文本中引入换行符
- rust - 我应该如何为 Rust 中的 Struct 中的每个字段干燥重复的统计计算?
- python - QGroupBox 内的 QPaint
- c# - 基于 Serilog WPF 的应用程序可以工作,但作为 EXE 安装时不能
- command - 如何解决 NetLogo 中的“预期命令”?
- haskell - Haskell:错误无法匹配预期类型
- javascript - Nearley 后处理正在删除有效的空格
- mongodb - 将字符串列表转换为 clojure 中的 java 类型对象列表
- html - 平滑的下拉菜单