我必须设计和开发在游戏应用程序中的反馈形式在后端的功能.
因此,使用 case 是管理员将创建多个反馈表单,这些表单将在游戏应用程序中显示给用户.此表将包含一些与应用程序反馈相关的问题.
该表单将具有开始时间和结束时间,并且仅当表单处于活动状态时才向用户显示,即其当前时间在开始时间和结束时间之间,并且当获得用户的特定触发器集时. 这里的触发器可以是game won或XP Increased.这些是预定义的触发器,将与管理员创建的每个表单相关联.
在游戏结束时,将调用一个API,该API将判断用户注册的触发器,并根据注册的触发器和当前时间从数据库中获取相关反馈. 我的设计是将这些数据存储在某个文档数据库(NOSQL)中,因为不需要事务,并且表单的格式可以变化 对于表单,我将创建一个具有如下文档 struct 的集合form_collection
{
_id: ObjectId, // Unique identifier for the form
title: String, // Title or name of the feedback form
description: String, // Description or additional information about the form
created_at: Date, // Timestamp indicating when the form was created
status : bool,
start_time : Date, //Timestamp when the form will be active
end_time : Date, //Timestamp when the form will be inactive
questions: [
{
question_id: ObjectId, // Unique identifier for the question
question_text: String, // The actual text of the question
question_type: String, // Type of question (e.g., open-ended, multiple-choice, rating-based)
options: [String] // If applicable, an array of available options for multiple-choice questions
},
// Other questions...
],
triggers: [ObjectId] // Array of trigger IDs associated with the form
}
而user集合将具有如下文档 struct
{
_id: ObjectId, // Unique identifier for the user
username: String, // User's username or identifier
email: String, // User's email address
// Other user profile fields...
triggers: [
{
trigger_id: ObjectId, // Unique identifier for the trigger
triggered_at: Date // Timestamp indicating when the trigger was triggered for the user
},
// Other triggers...
]
}
现在将有两个流
流程一:与用户一起存储触发器信息
无论何时触发发生Game won,该触发都将存储在user集合内
流程二:为用户获取反馈表单
我们将获取用户的当前触发器集,然后查询当前时间介于表单的开始时间和结束时间之间的文档集合,然后从该列表中筛选出映射了用户获取的所有触发器的文档 这将需要搜索两次,而且看起来并不优化.我可以在开始时间添加索引,并在form_collection中触发数组,但这似乎不是针对高流量优化的.
Another approach I can think of is个
预计算触发器列表
每当管理员创建表单时,我们都会在一些键-值类型的NoSQL数据库中为一组触发器设置一个键,并在那里添加一个文档列表.这将把一些复杂性从管理转移到表单创建上.
<TriggerOne-TriggerTwo-TriggerThree> : [Forms]
有没有其他方法可以降低每次获取表单的复杂性,预计算方法是否正确,因为它将达到表单列表的限制(可以添加到列表中的表单数量) 任何建议都将受到高度赞赏.此外,如果我不能正确/充分地解释,我是一个新人,非常抱歉,我愿意在 comments 中讨论任何要求的纠正.我可以使用任何数据库作为后端.MongoDB不是必须的. 再次感谢你们,伙计们.