LINUX.ORG.RU

Спецам по mongodb

 


0

2

Есть скрипт. Он использует mongodb. Туда поступают последовательно данные ( много послед insert ) соотв они обрабатываются. Все работает замечательно. НО: возникла необходимость вставлять в БД данные асинхронно - т е в несколько потоков из нескольких источников. Объясните пж-лста как это работает там: будет ли каждый insert в коллекцию лочить всю коллекцию на время insert ?

★★☆☆

Последнее исправление: SI (всего исправлений: 1)

вставлять в БД данные асинхронно - т е в несколько потоков из нескольких источников.

Это без проблем, потому что само апи «асинхронное» - то что операция прошла не значит что данные записаны. Так что вполне нормально. Если пишите на джаве только не делайте слишком много потоков на соединение.

theos ★★★
()

Атомарность поддерживается только на уровне одной записи, т.е. по ключю «_id» в структуре БД. Что подразумевается под словом асинхронно? Есть два варианта:

1. Приложение пишет в БД асинхронно данные с уникальными ключами из одной выборки. Например, список всех стран бьется на N-кусков/потоков, которые заливаются в асинхронном режиме. Никаких блокировок не будет.

2. Приложение состоит из несколько независимых потоков, каждый со своей уникальной выборкой. Например, весь список городов записывается/обновляется по несколько раз несколькими потоками независимо. При этом в момент пересечения ключей/страны может произойти блокировка на уровне БД, но по идее ее не должно быть, последняя запись/обновление будут конечными.

P.S. Под потоком может быть несколько независимых процессов, не важно. Асинхронность достигается на канальном уровне (tcp соединение), т.к. каждый запрос не тагируется/маркируется, нет функционала для обозначения начала и конца транзакции.

How-to: http://cookbook.mongodb.org/patterns/perform-two-phase-commits/

gh0stwizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.