For financial transaction services I can recommend sharding first by customer, then by ledger. As a result, instead of enforcing double-entry book-keeping standards within a single database, do it at an application-specific middleware server layer to enforce only the guarantees you need.<p>As with all decisions, there are tradeoffs. For a little more up-front complexity and a tiny nominal performance hit, this allows maintenance, encryption, non-uniform storage paradigms to suit individual ledgers, rolling upgrades, storage location migration, and other cool stuff which is typically painful with traditional all-or-nothing RDBMS architectures.
Citus is a pretty powerful tool. We recently used Citus to help scale one of our databases and wrote a blog post about it:
<a href="https://hipmunk.github.io/posts/2017/Aug/16/a-fare-cache-in-a-sharded-data-cluster/" rel="nofollow">https://hipmunk.github.io/posts/2017/Aug/16/a-fare-cache-in-...</a>
What ORMs out there natively support sharding well? I use Django the most and whenever I look into Django sharding, I don't see very many options being kept up to date...