다운 스트림 사업자 (SQLite는) 거래 전 항목 중 일부 스트림이 가정 :데이터베이스 rxJava
Observable<Item> stream = ...
난 달성하기 위해 노력하고 무엇을?
- 스트림에는 모든 조작이 있습니다. 트랜잭션을 시작하기 전에 모든 작업은 경우에 완료 될 한
- 은 어떻게 든
db.beginTransaction()
- 가 거래를 시작한 후 모든 사업자는
- 거래 트랜잭션 내에서 실행되어야한다 스트림의 중간에 거래를 시작 트랜잭션 외부에서 실행해야합니다 성공적인 작업의
db.setTransactionSuccessful
- 거래는 항상 두 조각 가지고 좋은 것
db.endTransaction
- 종료해야 : 오픈 한 다운 스트림 작업의 모든 항목에 대한 거래;
//some upstream operators stream.doOnNext(i -> ...) .map(i -> ...) //somehow start transaction here //operator inside transaction. All database changes will be reverted in case error .doOnNext(i -> /*database ops*/) .subscribe()
PS
스트림의 각 항목에 대한 개폐 트랜잭션 DB는 응용 프로그램이 지금은 해결책을 가지고쓰기
SQLiteDatabase
의 인스턴스를 범위입니다. 하지만 더 깨끗한 방법에 대한 제안이 있습니까?
소스로부터 오는'Item' 각각에 대해 별도의 트랜잭션을 원하십니까? '데이터베이스 '란 무엇입니까? 이 특정 항목 또는 일부 전역 변수에 대한 연결입니까? 그것이 글로벌 일 경우 트랜잭션 또한 글로벌 일 것입니다.모든 항목이 처리 될 때까지 거래를 지속 하시겠습니까? –
'database'는 쓰기 가능한'SQLiteDatabase'의 전역 인스턴스 (응용 프로그램 범위)입니다. 스트림의 모든 항목을 처리하기 위해 하나의 트랜잭션을 열고 싶습니다. 그러나 각 항목에 대한 새로운 트랜잭션도 흥미로운 접근 방식입니다. 그러한 거래가 세계적이라고 언급했는데, 제한적입니까? – Beloo
글로벌 거래가 이상하게 보입니다. 이는 단일 트랜잭션이 동시에 프로그램에서 발생하는 모든 데이터베이스 활동을 포함하게된다는 것을 의미합니다. 결과적으로 정확하게 거래를 시작할 때 많은 문제가 발생하지 않아야합니다. 파이프 라인의 모든 작업은 각 항목에 대해 반복됩니다. 첫 번째 항목은 트랜잭션을 열고, 후속 항목에 대한 * 모든 * 작업은 해당 트랜잭션 내에있게됩니다. –