Imr*_*ran 5 mysql database sharding bigdata
我知道水平分区......你可以创建很多表.
我已经看到在基于应用程序的分片中,您将在多个数据库服务器上拥有相同的数据库结构.但它不会包含相同的数据.
例如:
Users 1 - 10000: server A
Users 10001 - 20000: server B
Run Code Online (Sandbox Code Playgroud)
用于分片的技术是MySQL-Proxy,例如一些工具(基于MySQL代理)是SpockProxy.我们也可以手动分片.必需的是主表,例如:
-------------------
| userA | server1 |
| userB | server2 |
| userC | server1 |
-------------------
Run Code Online (Sandbox Code Playgroud)
但是这些技术在应用程序级别处理..我想在DB服务器级别解决它..
我们可以透明地使用多个服务器吗?这将允许Mysql表扩展.
在X服务器上创建X表,最终用户通过简单查询获取数据到单个数据库服务器?
总之,我想在单个表中插入16TB的数据,但我没有在单机上有这么大的空间,所以我想安装两个服务器,每个容量为8TB.但是用户查询单个数据库并在后端获取结果可能会使用分片.
我还讨论了一些其他好的解决方案,例如MYSQL Clustering.
有没有人愿意解释,或者有一个好的初学者教程(循序渐进)教你如何跨多个服务器进行分区?
在继续前进之前,你需要调整你的想法。我不认为在 MySQL 上有一种简单的方法可以做到这一点——我相信如果您付出努力使用表FEDERATED和视图就可以做到这一点但是,rdbs 分片充其量也绝非易事。
然而分片却非常有。分片表几乎总是错误的看待方式。相反,您确实需要对数据集进行分片。这是因为跨节点的连接成本很高。
所以我强烈建议大家重新开始讨论这个问题。如果您确实不需要联接,请查看其他开箱即用支持此类事物的数据库,例如 Cassandra。但是,如果确实需要联接,则确实需要查看数据库中的每个表并找到良好的分区标准,然后对其进行分区,以便拥有相同的数据库模式和不同的分片。
一旦完成,您就可以在数据库前面放置一个代理来适当地处理路由查询。请参阅https://github.com/flike/kingshard作为一种可能性(尽管作为免责声明,我还没有在 MySQL 上使用过这些)。通过代理,您的应用程序将获得单个数据库的外观,当我读到您的问题时,这确实是您的目标。
| 归档时间: |
|
| 查看次数: |
1477 次 |
| 最近记录: |