有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用Amazon S3作为键值存储(在生产中)

在我的项目中,我使用芥末作为S3存储,我一直在考虑使用S3作为关键值,即存储。如本文所述,Wasabi不对API请求收费https://wasabi.com/cloud-storage-pricing/

任何人都可以轻松地(可能使用任何编程语言)实现Amazon S3的简单接口:

value = store.get(key)
store.put(key, value)
store.delete(key)

其中key是字符串value是二进制数据。有效地将其用作高度分布式和弹性的键值存储

因此可以存储用户对象,例如

userid:1234567890:username -> johnsmith
userid:1234567890:username:johnsmith:password -> encrypted_password
userid:1234567890:username:johnsmith:profile_picture -> image_binary
userid:1234567890:username:johnsmith:fav_color -> red

值被序列化为二进制

等等

我有几个问题,对于那些试图使用S3作为数据库或数据存储的人来说,使用AmazonS3作为键值存储的最佳策略是什么。虽然我认为通过查询带有前缀userid:1234567890的键并执行代码中所需的逻辑来检索这里描述的整个用户对象相当容易,但这样做的明显缺点是无法搜索值

  1. 这里可以使用什么算法来实现一个简单的键搜索功能,例如搜索用户名以“j”开头的用户或fav_颜色为“红色”的用户,查看非常基本的键值界面get and put,我认为这是不可能的,但也许有人知道解决方法
  2. 对于这种键值存储,对于基本数据类型(字符串、数字、布尔值等)和Blob数据(图像、音频、视频和任何类型的文件),哪种序列化策略最适合?此外,这个简单的键值无法定义键值中存储的值的类型(是字符串、数字、二进制等吗?),如何解决这个问题
  3. 在这种情况下,如何实现交易?像上面的例子一样,存储username{}当且仅当其他键也被存储或根本不被存储时,我想S3批处理操作是否足以解决这个问题
  4. 在计划将其用作应用程序(和生产使用)的主数据库时,主要的设计考虑因素是什么,既包括算法方面,也包括S3本身的局限性

共 (0) 个答案