mysql - 高可用讨论db模型——mysql
问题描述
您能否分享您对可扩展性的见解?
假设我有一个简单的 MySQL/RDBMS db 用于树状讨论:
表:
- 讨论(ID,网址)
- 评论(id,discussionId,parentCommentId,slug)
- comment_vote (discussionId, commentId, userId, value)
这个想法是在这个 RDBMS 结构中执行不太频繁的写入(与更频繁的读取相反),然后在写入重建缓存以将整个讨论写入某个读取缓存(可能是文档数据库)中,其中存储的格式可以在没有进一步处理的情况下提供服务给客户。
- 我们预计每天有 250MB 的新数据或每分钟 1000 个请求(90% 读取)。
- 在 comment_vote 中,我们应该以某种方式确保对于特定评论,每个用户最多有 1 票。
- 数据库与讨论ID键分片,我们有任意数量节点的数据库集群
1./ 这种布局在现实中能走多远?我的意思是,我们这里只有 3 张桌子。有没有明显的瓶颈?就像重建索引,一些表级锁定,......在表中的每个插入上,应该有数百千兆位甚至更多?
2./将文档数据库也用于写入是否更合理,因为例如它们可以为较小的部分处理更好的物理锁定?
3./还有其他想法/更好的解决方案吗?
非常感谢。
解决方案
好吧,管理高负载是一项非常全面的任务,因此您可以在https://dba.stackexchange.com/上试试运气
最初的想法
- 您可以尝试将 PostgreSQL 作为 MySQL 的更强大替代品
- 对于类似论坛的记录,根据评论/讨论的 DATE 值构建 PARTITIONING 可能是一个很好的解决方案。因此,您需要添加 DATE 字段 - 例如上次更新、上次读取等。此值还将帮助您在逻辑上决定是否需要归档
- 如果你需要实现快速的全文搜索 MySQL 不是最好的方法
推荐阅读
- c# - 如何防止构造函数在值更改时被调用
- javascript - 如何使用 JavaScript 在画布中单击一个圆圈
- wso2 - Ballerina 的整数模除法和整数除法余数
- android - Kotlin 合约在 Android 开发中的用例是什么
- mysql - 如何根据SQL中的第一条记录进行匹配和填充?
- javascript - 尝试在 Vue.js 中动态添加 id 时未定义的 id
- javascript - 如何访问无状态组件中的函数?
- php - 部署到 Ubuntu 18.04 服务器后如何在 Laravel 中修复“未捕获的 ReflectionException:类视图不存在”
- sql-server - SQL Server - 删除存储过程时触发
- r - Bookdown 不会在输出 pdf 中呈现图像