小编iry*_*iry的帖子

当我们使用“iOS”作为类名中的单词时,我们应该将“i”大写吗?

有些品牌名称实际上不喜欢将其第一个字母大写,更改可能会使其看起来完全不同,尤其是对于“iOS”。还有更多类似“mCore”、“macOS”等。当涉及到类名时,我应该将第一个字母大写还是保留原来的?

例如“ iOSCompatProxy”与“ IOSCompatProxy

java camelcasing naming-conventions

10
推荐指数
1
解决办法
1958
查看次数

MongoDB 如何处理事务冲突?

如果两个线程都读写同一个文档:

try (ClientSession clientSession = client.startSession()) {
    clientSession.startTransaction();
    result = collection.find(clientSession, keyOfDoc);
    if (result blah blah blah) {
        // Change the doc
        collection.insertOne(clientSession, doc);
    }
    clientSession.commitTransaction();
}
Run Code Online (Sandbox Code Playgroud)

从事务的目的来看,一个线程应该得到另一个线程的编辑版本。

但是,当两个线程开始事务时,它们都获得了读锁,然后读取了文档。这两个线程都获得了旧版本的文档。并且当他们需要写文档时,他们会尝试获取写锁,这将使事务不是原子的。

另一种情况是写-写冲突。

try (ClientSession clientSession = client.startSession()) {
    clientSession.startTransaction();
    collection.insertOne(clientSession, docDifferent);
    collection.insertOne(clientSession, docSame);
    clientSession.commitTransaction();
}
Run Code Online (Sandbox Code Playgroud)

两个线程先获取不同文档的写锁,然后获取同一个文档的写锁,又是一个事务冲突。

MongoDB 使用什么级别的锁?我知道他们在 2.2 版之前使用实例级别,而自 4.0 版起支持事务。如果 MongoDB 不使用数据库级锁,那么 MongoDB 如何处理事务冲突?或者如果它使用数据库级锁,它如何处理读写冲突?

concurrency locking mongodb

7
推荐指数
1
解决办法
6131
查看次数