我对非关系型数据库和DynamoDB非常陌生,我习惯于RDBMS。我正在为一个游戏设计数据库,我们正在使用DynamoDB和AWS Lambda作为后端。我为包含用户信息和资源的玩家配置文件创建了一个表名“用户”。因为游戏有库存系统,我还创建了一个表名“用户项”。
这一切都很好,直到我意识到DynamoDB没有事务,任何在两个表上执行的操作(例如使用增加资源的项目)都有可能在一个表上失败,而在另一个表上成功,并将导致丢失数据,从而影响我们的客户。
所以我想也许我的多表设计不好,因为我在使用RDBMS时习惯设计多表。这让我想到将整个“UserItems”存储为“Users”中的散列,但我不确定这是否是一个好的做法,因为Users表中的一行的大小将非常大(每个用户可能有500个唯一的项),并且每次我从“Users”中提取或向“Users”中放入数据时(大多数情况下不需要“UserItems”数据)读/写吞吐量也将非常大。
我应该怎么做,保持多表设计并手动处理事务,还是切换到单表设计?或者也许还有第三种选择?
更新:关于我的用例的更多信息
目前我有两张桌子
情节:
在上述两种情况下,我将不得不对2个表进行2次更新操作,如果没有事务,其中一个表可能会失败。
为了解决这个问题,我考虑使用单表解决方案,它是一个带有4列USEID(Key)、用户名、金、USER项的单用户表。然而,有两件事我很担心:
NoSql数据库最适合于非事务数据。如果您将规范化(将数据拆分为多个表)引入noSQL,那么您就达到了它的全部目的。如果性能是最重要的,那么你应该考虑只有一个表用于你的用例。DynamoDB支持范围键,还支持辅助索引。对于您的用例,最好重新设计表以使用范围键。如果您能分享更多关于当前表的详细信息,也许我可以帮助您提供更多信息。
FWIW,AWS关于DynamoDB NoSQL设计的文档建议使用一个表:
一般来说,您应该在DynamoDB应用程序中维护尽可能少的表。如前所述,大多数设计良好的应用程序只需要一个表,除非有使用多个表的特定原因。
例外情况是指涉及大量时间序列数据的情况,或具有非常不同访问模式的数据集,但这些都是例外情况。具有反向索引的单个表通常可以使简单查询能够创建和检索应用程序所需的复杂层次数据结构。
工作台是我们进入之后看到的第一个页面,主要列出以下一些信息 使用文档 创建应用入口 空间CPU及内存资源使用情况 你可操作的最新的几个应用 该空间下最近应用的动态 您可操作的空间列表 您规属于哪些权限组列表
客服工作台 管理员和普通客服可以登录工作台处理转过来的访客咨询。 左侧是客服状态和会话列表,可以更改在线、忙碌和离线的状态,也可以看到所有正在进行的会话和历史会话列表。 选择某个会话后可以在中间区域发送消息进行接待,在右侧辅助信息区域tab下可以添加这个访客的姓名、电话、邮箱等信息。 接待结束后可以点击会话窗口区域右上角的叉号结束会话。 智能小助手 客服处理人工咨询时,点击访客会话内容会自动推荐答
微工作台,提供了企业连接微信的重要能力,是企业用微信连接员工、上下游、供应商的重要入口。管理员开启微工作台,员工关注后,则无需下载企业微信APP,用微信就能接收消息,使用应用,进行协作。 适用群体 一线销售、企业外聘员工、上下游供应商、合作伙伴。 以偏中大型的企业为例,企业可通过微工作台打通员工内部、上下游供应商之间的关系,加速企业内外的信息流转。让供应商等松散组织关注微工作台,在微信中接收订单提
线索工作台 市场人员在营销通也可以查看所有市场渠道获取的线索列表,在这里可以查看线索的来源、来自于哪场市场活动,当前所在线索池,以及线索状态等; 选中线索或点击线索名称进入线索详情页面,可对线索进行管理;
设备开发工作台是阿里云IoT提供的一款基于开源技术搭建的嵌入式WebIDE,目标是降低整个物联网开发流程中嵌入式开发环节的技术门槛,使开发者将自己的设备轻松接入阿里云IoT的物联网平台。
7.1 ABP后台服务 - 后台作业和后台工人 7.1.1 简介 ABP提供了后台作业和后台工人,来执行应用程序中的后台线程的某些任务。 7.1.2 后台作业 由于各种各样的原因,你需要后台作业以队列和持久化的方式来排队执行某些任务。 例如: 用户等待执行一个长时任务。例如:某个用户按下了报表按钮生成一个需要长时间等待的报表。你添加这个工作到队列中,当报表生成完毕后,发送报表结果到该用户的邮箱。