Str*_*rae 6 database postgresql optimization scaling
我知道这是一个非常通用和主观的问题,所以如果它不符合StackOverflow网络礼节,请随意投票关闭它...但对我来说,值得尝试;)
我从来没有建立过高流量的应用程序,所以我不知道(除了网上的一些阅读)关于扩展实践.
如何设计一个数据库,当需要扩展时,我不必重构数据库结构或应用程序代码?
我知道开发(和优化)应该逐步进行,在发生时优化瓶颈,并且当你不知道你将拥有多少用户以及他们将如何使用时,几乎不可能设计出完美的结构.数据库(例如读/写比率),我只是想找个好的基础来开始.
没有什么方法让几乎可以与缩放结构的最佳实践partitioning和sharding,什么hacks必须绝对避免?
编辑我的应用程序的一些细节:
这个问题确实很笼统,但这里有一些提示:
不要在应用程序代码中使用任何会话变量(pg_backend_pid()、inet_client_addr())或每会话控制(SET ROLE、SET SESSION)。
不要在应用程序代码中使用显式事务控制(BEGIN/COMMIT/SET TRANSACTION)。所有此类逻辑都应包含在UDF中。这实现了无状态、语句模式池化,从而实现了尽可能最快的数据库池化。(请参阅pgbouncer 文档和pg wiki了解更多信息)
将所有 App<->Db 通信封装在 UDF 的明确定义的 DB API 中 - 这将允许您使用 PL/Proxy。如果对所有 SELECT 执行此操作太困难,请至少对所有数据写入(INSERT/UPDATE/DELETE)执行此操作。示例:而不是INSERT INTO users(name) VALUES('Joe')您需要SELECT create_user('Joe').
检查您的数据库模式 - 是否可以轻松分离属于给定用户的所有数据?(很可能这将是分区键)。剩下的就是需要复制到所有节点的公共共享数据。
在需要之前考虑缓存。缓存密钥是什么?什么是缓存超时?你会使用memcached吗?
| 归档时间: |
|
| 查看次数: |
2755 次 |
| 最近记录: |