I want to migrate my banking system from mongodb to couchbase
In mongodb I have 2 collection transactions
and activity
The transactions collection contains _id
,sourceUserId
,destinationUserId
,amount
,tax
,… fields , And I shard it by _id
The activity
collection , is a collection that depends on transactions
, When I insert/update a document in transactions
I insert/update 2 documents in activity
The activity collection contains _id
, transactionId
,userId
,sourceUserId
,destinationUserId
,amount
,tax
,… fields , And I shard it by userId
When user A send money to user B we have these 3 documents
transactions collection :
_id=1
,sourceUserId=A
,destinationUserId=B
,amount=100
,tax=0
activity collection :
_id=100
,transactionId=1
,userId=A
,sourceUserId=A
,destinationUserId=B
,amount=100
,tax=0
_id=101
,transactionId=1
,userId=B
,sourceUserId=A
,destinationUserId=B
,amount=100
,tax=0
transactions
collection is only for internal usage and activity
collection is for report to end user
So when user A need to fetch the transaction activities , I target a shard as actitity
collection is sharded by userId
How can I migrate to couchbase?
As activity
collection is duplicate data of transactions
collection , Is it needed to migrate this collection? As there is no shard key
in couchbase?
What is the best model design for couchbase?
1- Just migrate transactions and create two GSI on sourceUserId
and destinationUserId
, when user A need to fetch activities , I can run SELECT * FROM myBucket WHERE type="transaction" AND (sourceUserId="A" OR destinationUserId="A")
, Is it good? As I have heavy read
2-I can create view (But I dont know how , and it is better that GSI approach?)
3-Can I have same data model as mongodb? 1 transaction + 2 activity document , How can I efficiently fetch user A activities
4-Is there any better ways?