【发布时间】:2016-02-22 19:01:00
【问题描述】:
我正在设计 2 张桌子。
user_table (userid username) 预计有 10 万条记录
transaction_table(transactionid, date, description, userid) 预计有 50 亿条记录。预计每位用户的交易量接近 50K。
transaction_table 存储用户完成的交易。此表很少有任何UPDATE 或DELETE 操作。有重要的SELECT和INSERT操作,但都是基于userid。因此,我要么将用户的事务插入表中,要么返回特定用户所做的事务。
划分transaction_table 有意义吗?
这是因为,将有 100K 个分区表,每个分区表用于 1 个用户。这在任何意义上都好吗?
我还有哪些其他选项可以让INSERT 和SELECT 在transaction_table 上快速运行?
【问题讨论】:
-
您希望对 transaction_table 进行哪些查询?如果您需要检索特定用户的所有事务,则按用户 ID 分区是有意义的。对于像“用户的 100 次最新交易”这样的查询,索引 (userid,date) 就足够了。
-
我期待像 -- (1) 这样的查询。 “用户的前 X(比如 100)笔交易”。 (2)“用户的下 X 笔交易”(3)“用户 2015 年 1 月 1 日至 2015 年 1 月 1 日的所有交易”等
标签: postgresql database-schema data-modeling partitioning