有些品牌名称实际上不喜欢将其第一个字母大写,更改可能会使其看起来完全不同,尤其是对于“iOS”。还有更多类似“mCore”、“macOS”等。当涉及到类名时,我应该将第一个字母大写还是保留原来的?
例如“ iOSCompatProxy”与“ IOSCompatProxy”
如果两个线程都读写同一个文档:
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 如何处理事务冲突?或者如果它使用数据库级锁,它如何处理读写冲突?