The following considerations should be taken into account while implementing this pattern:
- Partitioning Strategy: Choosing a partition strategy is the key to efficiently balance load across multiple partitions. Following are few of the partitioning strategies which can be considered:
- Horizontal Partitioning (Sharding)
- Vertical Partitioning
- Functional Partitioning
Data Partitioning guidelines published by Microsoft (https://msdn.microsoft.com/en-us/library/dn589795.aspx) is a good reference document to understand these strategies.
- Data replication: It is advisable to replicate static data and commonly used data across data partitions to avoid cross partition queries which can be resource consuming.
- Rebalancing: Always plan for rebalancing tasks for the partitions which may be required as the partitions age. Rebalancing may cause system downtime.
- Referential integrity: Consider moving the ownership of referential integrity to the application layer instead of the database layer to avoid cross partition queries
- Transactions: It is advisable to avoid transactions which access data across partitions as this may introduce performance bottlenecks
- Consistency: When data is replicated across partitions, it is important to decide on a consistency strategy. You will need to decide if your application requires strong consistency or if it can manage with eventual consistency