Когда я должен использовать партии и когда следует использовать транзакции? Могу ли я встроить транзакцию в пакет? Пакет в транзакции?В CockroachDB, как взаимодействуют партии и транзакции?
ответ
A batch - это набор операций, которые отправляются на сервер как единое целое для повышения эффективности. Это эквивалентно отправке тех же операций, что и отдельные запросы из разных потоков. Запросы в пакете могут выполняться не по порядку, и некоторые операции в пакете возможны, если другие не работают.
In Go, партии создаются с дозирующим объектом DB.B
и должны быть переданы DB.Run()
. Например:
err := db.Run(db.B.Put("a", "1").Put("b", "2"))
эквивалентно:
_, err1 := db.Put("a", "1")
_, err2 := db.Put("b", "2")
транзакция определяет последовательную и атомное последовательность операций. Транзакции гарантируют согласованность по отношению ко всем другим операциям в системе: результаты транзакции не могут быть видны до тех пор, пока транзакция не будет совершена. Поскольку транзакции, возможно, потребуется повторить, транзакции определяются объектами функций (обычно закрытие), которые могут быть вызваны несколько раз.
In Go, операции создаются с использованием метода DB.Tx. Параметр *client.Tx
к закрытию реализует аналогичный интерфейс с DB
; внутри транзакции вы должны выполнить все свои операции над этим объектом, а не с исходной БД. Если ваша функция возвращает ошибку, транзакция будет прервана; иначе он будет совершать. Вот транзакционный вариант предыдущего примера (но смотри ниже для более эффективной версии):
err := db.Tx(func(tx *client.Tx) error {
err := tx.Put("a", "1")
if err != nil {
return err
}
return tx.Put("b", "2")
})
Предыдущий пример ждет на «а» писать, чтобы завершить перед запуском «B» запись, а затем ждет для записи «b» до завершения транзакции. Это можно сделать более эффективным, используя партии внутри транзакции. Tx.B
- объект дозатора, как и DB.B
. В транзакции вы можете запускать партии с Tx.Run
или Tx.Commit
. Tx.Commit
будет совершать транзакцию тогда и только тогда, когда все остальные операции в пакете будут успешными и эффективнее, чем позволить транзакции совершать автоматически при возврате закрытия. Это хорошая практика, чтобы всегда сделать последнюю операцию в транзакции партии выполняемой Tx.Commit
:
err := db.Tx(func(tx *client.Tx) error {
return tx.Commit(tx.B.Put("a", "1").Put("b", "2"))
})
- 1. Как создается MVCCKey в CockroachDB?
- 2. Как несколько вызовов save() взаимодействуют в транзакции grails/hibernate?
- 3. Connect Rails to CockroachDB
- 4. Как взаимодействуют DeleteFile и FindFirstFile?
- 5. Как взаимодействуют модели и модули?
- 6. Как Java и NodeJS взаимодействуют в бэкэнд?
- 7. Как объекты взаимодействуют в ООП?
- 8. Как взаимодействуют LocalConnections в AS3?
- 9. Как взаимодействуют объекты в игре
- 10. Как взаимодействуют проекты в решении
- 11. Исключение транзакции весенней партии: существующая транзакция обнаружена в JobRepository
- 12. Вызов партии в партии?
- 13. OpenCV и Numpy взаимодействуют плохо
- 14. NSRunLoop и NSAutoreleasePool, как они взаимодействуют?
- 15. Как Vulkan Driver и Vulkan SDK взаимодействуют?
- 16. Как взаимодействуют операции Meteor.subscribe и MyCollection.find *?
- 17. Как правильно взаимодействуют серверы и клиенты?
- 18. Как взаимодействуют пакеты подпроцесса и многопроцессорности Python?
- 19. Как взаимодействуют функции окна и групповое предложение?
- 20. Qt: Как взаимодействуют QGuiApplication и QQmlApplicationEngine?
- 21. Android APP и mysql взаимодействуют
- 22. Can CockroachDB работает на малине Pi?
- 23. teamplayer и pyhook взаимодействуют странно
- 24. многократная вставка в транзакции
- 25. Как обрабатывать размер партии партии и размер партии фида в тензорном потоке?
- 26. рельсы взаимодействуют с сторонним API?
- 27. как подклассы взаимодействуют с суперклассами
- 28. Вставить и обновить в одной партии
- 29. Как взаимодействуют потоки с пользователями в Android?
- 30. Как взаимодействуют микро услуги в Cloud Foundry?
вы должны отметить свой ответ как ответ, это будет весьма полезно –