【发布时间】:2021-10-07 17:15:08
【问题描述】:
首先,我阅读了Firebase Blog: Best Practices Arrays,这是有问题的反模式结构Anti-Pattern Array。
这就是反模式数组的编码方式:
database.child("\(groupChatId)_I/messages").runTransactionBlock ({ (currentData: MutableData) -> TransactionResult in
guard var currentMessages = currentData.value as? [[String: Any]] else {
completion(false)
return TransactionResult.success(withValue: currentData)
}
...
// Define the message dimensions
let messageIndex: [String: Any] = [
"message_id": newMessageData.messageId,
"message_type": newMessageData.kind.messageKindString,
"message_content": message,
"sender_name": myName,
"message_date": dateString,
"sender_email": mySafeEmail,
]
currentMessages.append(messageIndex)
currentData.value = currentMessages
return TransactionResult.success(withValue: currentData)
})
我知道数组被描述为“邪恶的”,尤其是当多个用户尝试同时编辑同一个数组时。但是,调用 runTransactionBlock 不会阻止混乱的发生吗?如果我理解正确,它会在数组修改完成之前“锁定”该数据库目录。
我是否需要担心使用这种存储数组的反模式方式?请在提供答案时简要包含以下概念:潜在的可扩展性问题、数据库成本帐单以及存储有序数组(文本消息)的更好方法。
如果我滥用了任何术语,我提前道歉。
【问题讨论】:
标签: arrays swift firebase firebase-realtime-database