Ios 在Firebase中存储切换按钮状态
我希望大约有100个切换按钮,带有与之关联的硬编码项(所有用户都将拥有相同的项)-切换表示用户在我的SwiftUI应用程序中是否拥有该项。我使用Firebase作为后端,并实现了身份验证和数据库(实时,但我想我将改为firestore) 对于使用应用程序的每个用户,我如何以最佳方式存储是否选中/取消选中了这些按钮 一个解决方案是将所有100个项目存储在数据库中的用户id下,但这会导致大量重复数据。(1000个用户意味着仅为100个不同的项目存储100000个项目状态)。(对于可伸缩性来说不是很好) 例如:Ios 在Firebase中存储切换按钮状态,ios,firebase,google-cloud-firestore,swiftui,Ios,Firebase,Google Cloud Firestore,Swiftui,我希望大约有100个切换按钮,带有与之关联的硬编码项(所有用户都将拥有相同的项)-切换表示用户在我的SwiftUI应用程序中是否拥有该项。我使用Firebase作为后端,并实现了身份验证和数据库(实时,但我想我将改为firestore) 对于使用应用程序的每个用户,我如何以最佳方式存储是否选中/取消选中了这些按钮 一个解决方案是将所有100个项目存储在数据库中的用户id下,但这会导致大量重复数据。(1000个用户意味着仅为100个不同的项目存储100000个项目状态)。(对于可伸缩性来说不是很好
你的解决方案也是我想到的第一个方法 改进方法:由于切换按钮只有两种状态,所以只能存储所有真值或所有假值,无论您认为什么都会减少输入 例如,如果只存储true:在应用程序中,您可以检查用户的特定按钮是否有true值,否则只需将其设置为false
编辑:为了更清楚,在我的示例中,您不会存储
“House”:“False”
。因为没有房屋价值,所以您只需将按钮设置为false。您的解决方案也是我想到的第一种方法
改进方法:由于切换按钮只有两种状态,所以只能存储所有真值或所有假值,无论您认为什么都会减少输入
例如,如果只存储true:在应用程序中,您可以检查用户的特定按钮是否有true值,否则只需将其设置为false
编辑:为了更清楚,在我的示例中,您不会存储
“House”:“False”
。因为没有内部值,所以您只需将按钮设置为false。这实际上取决于您如何构建数据库。但是,如果采用这种结构,则可能有助于减少数据存储的使用:
表匹配返回具有唯一ID的所有键:
KeysTable:
1: "House",
2: "Car",
...
然后,每个用户的项目列表可以如下所示:
"Items": [1, 4, 5, 6, 8, ...] // List only the key ids with "true" values
最后,每个用户都可以使用keys表检索哪些键处于打开状态,哪些键处于关闭状态:
Pseudocode:
OnItems = user.items.map { KeysTable.getValueWithKey[$0] }
OffItems = KeysTable.keys.difference(user.items).map { KeysTable.getValueWithKey[$0] }
这实际上取决于数据库的结构。但是,如果采用这种结构,则可能有助于减少数据存储的使用: 表匹配返回具有唯一ID的所有键:
KeysTable:
1: "House",
2: "Car",
...
然后,每个用户的项目列表可以如下所示:
"Items": [1, 4, 5, 6, 8, ...] // List only the key ids with "true" values
最后,每个用户都可以使用keys表检索哪些键处于打开状态,哪些键处于关闭状态:
Pseudocode:
OnItems = user.items.map { KeysTable.getValueWithKey[$0] }
OffItems = KeysTable.keys.difference(user.items).map { KeysTable.getValueWithKey[$0] }
谢谢,我也考虑过,但是我不知道我会从哪里检索用户没有的东西。你会在应用程序中创建所有项目,然后在启动时初始化这些值吗?我想我不完全理解你所说的“检索用户没有的项目”是什么意思。如果密钥(例如“House”)不包含在数据库中,那么用户就没有这个项目。谢谢@ TsChnias,我确实也考虑过,但是对于我在哪里检索用户没有的项目感到困惑。你会在应用程序中创建所有项目,然后在启动时初始化这些值吗?我想我不完全理解你所说的“检索用户没有的项目”是什么意思。如果您的数据库中未包含密钥(例如“house”),则用户没有该项。