所有用户都可以访问和更改的最有效的数据存储方式

Most efficient way of storing data which can be accessed and changed by all users

我目前正在学习 Swift 和 Parse,对于我要问的问题,我将对单元格使用简单的赞成票。

所以我有一个 table 视图控制器,它由对 Parse 上的 table 的查询填充。为此,我在相关 table 上创建了一个查询,然后将信息位存储到数组中,例如用户名、文本帖子和对象 ID 的数组:

var postGrabber: [PFObject] = [PFObject]()
var pSenderUsername: [String] = [String]()
var pPostBody: [String] = [String]()
var objectId: [String] = [String]()

然后我可以使用单元格的索引路径从上面的数组中获取相关信息。

每个单元格还有一个 UIButton(用于投票以及其他信息)。

要获取已单击哪个单元格的 indexPath,我使用:

    let btnPos: CGPoint = sender.convert(CGPoint.zero, to: self.tableView)
    let indexPath = self.tableView.indexPathForRow(at: btnPos)!
    let rowToAction = indexPath.first!

As a side note, objectAtIndexPath(rowToAction) does not seem to work in Swift 3, does anyone know of an alternative?

从这一点来看,我有点不确定更新 Parse table 的分数属性的最有效方法。

查看 Parse 文档后,我可能会使用计数器变量来保存分数或数组。

不过,我认为在多个用户试图在任何给定时间访问数据的情况下,使用计数器是否可能存在同步问题。 (不确定)

是否有人可以分享他们执行此类任务的方式,以便在任何给定时间只能由 1 个用户访问 Parse 中的数据,以避免此类问题。

所以你想增加 numberOfUpVotes

您可以使用

[post incrementKey:@"numberOfUpVotes"];
[post saveInBackground];

这将异步更新选票,incrementKey 方法是原子的。假设我们有 5 个用户同时单击 "up" 按钮,键 "numberOfUpVotes" 的值将是 5 而不是 1。

此外,您可以通过以下方式指定增量金额:

[post incrementKey:@"numberOfUpVotes" byAmount:[NSNumber numberWithInt:2]]

但我认为这不会发生在您的用例中:)

您可以从 Parse 中阅读此 post:

https://parse.com/questions/concurrency-management-in-parse

或者你可以看到我的问题:

note: my code is in Objective-C, but it's pretty easy to convert that into Swift.