- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个巨大的 InnoDB 表(>1TB,>1B 行),我想对其进行分片:我想从那个大表中创建多个较小的独立表。
怎么做?
我已经尝试过的:
随机的疯狂想法:
.idb
文件,并将其导入服务器,但我不知道是否存在能够执行此操作的工具。显示创建表:
CREATE TABLE `Huge` (
`account_id` int(11) NOT NULL,
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`foo` varchar(255) NOT NULL,
`bar` int(11) NOT NULL,
`baz` char(2) NOT NULL,
PRIMARY KEY (`account_id`,`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED;
分片键为 account_id。主键当前为 (account_id,id)
,因此行按 account_id
聚类。
是否有任何工具可以自动执行此任务?有更好的方法吗?
最佳答案
“分片”是将数据(通常是一张表)拆分到多个服务器。 “分区”是在同一 服务器上将一个表拆分为多个子表。你在做什么? Fabric 进行分片。您对 .ibd 的评论暗示您正在考虑分区。
假设您要PARTITION
一个巨大的表,我需要先问为什么。这是一个严肃的问题,因为大多数(我的意思是大多数)人认为分区会神奇地产生一些好处,而实际上它不会。我相信有only 4 use cases for partitioning .您的情况是否属于其中任何一个?
另一方面,如果您想要分片,请提供 SHOW CREATE TABLE
并讨论您将在哪个列上分片。
编辑(明确目标后)
我希望你没有明确的FOREIGN KEYs
;它们不适用于分区或分片。
`id` bigint(20) NOT NULL AUTO_INCREMENT,
UNIQUE KEY `id` (`id`)
有两个方面的问题。
不需要使id
UNIQUE
; AUTO_INCREMENT
的唯一要求是它是某个索引中的第一列。所以这会减轻系统的负担:
索引(id)
AUTO_INCREMENT
确实适用于PARTITIONed
表,但不适用于分片表。您需要评估 id
的用途。要么它只在一个分片内是唯一的就可以,那么就没有真正的问题。如果 id
需要在所有分片中都是唯一的,那就更难了。可能唯一的解决方案是拥有一种从某些中央服务器获取 ID 的技术。但是,这会导致单点故障和瓶颈。如果您需要朝那个方向发展,我可以就如何避免这些缺点提出建议。
如何迁移到最终的分片系统?
我不建议离题到 PARTITIONing
,从长远来看它不会真正有帮助。 REORGANIZE PARTITION
的成本很高——复制所有行,包括提取的行和剩余的行。 编辑:如果您确实使用了分区,请使用 pt-online-schema-change
以最短的停机时间进行拆分。
相反,我建议完善一种工具,将一个 account_id
从一个分片迁移到另一个分片。这必须是自定义代码,因为可能还有其他表(以及表之间的引用)会受到将帐户移动到不同服务器的影响。从长远来看,这对于负载平衡、硬件升级、软件升级,甚至模式更改都是有用的。当您需要更改某些内容时,使用新的操作系统/版本/模式/任何内容创建一个新的分片,并将用户迁移到它。
这个工具的简单方法是
DELETE
旧分片上的行如果帐户“小”,这不是什么大问题。但是,如果您需要最短的停机时间(写入受阻),那么我们可以讨论更复杂的方法。
(如果您没有猜到,我已经“去过那里,做过那件事”。)
关于mysql - 使用 MySQL/InnoDB 重新平衡表分片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31076437/
我是ElasticSearch的新手,并且一直在使用它的功能。 我在单个计算机上运行单个节点(master = true,data = true)。我创建一个索引,其中包含3个分片和每个分片1个副本。
我们在14个节点的集群中具有嵌入式Elasticsearch的Java应用程序。所有数据都驻留在中央数据库中,并在elasticsearch中对其进行索引以进行查询。完整的索引编制可以随时进行。 系统
我是 MongoDB 的新手,我想了解这两种技术如何协同工作: 当为你的数据库使用复制时,你有一个主节点和一堆辅助节点。为了保证一致性,建议大家始终从主节点读取,对吧? 因此,当您将复制与分片结合使用
有人告诉我,在一台更强大的机器上使用 100 个分片实现 mongodb 分片以实现更高的并发写入数据库是否有意义,每个 monogod.exe 进程都有一个全局锁?假设这是可能的,这种方法会给我更高
我有一个带有 4x 分片的生产 mongodb 部署 (3.6),它运行良好。我想向集群中添加 4 倍以上的分片。一次添加多个分片是否可以,或者这会引起戏剧性事件吗?我发现添加分片是一项昂贵的操作,在
假设在您的 Web 应用程序中,您需要调用多个 Redis 来呈现页面,例如获取一堆用户哈希。为了加快速度,您可以将 redis 命令包装在 MULTI/EXEC 部分,从而使用流水线,从而避免进行多
我正在查看ES文档,并看到以下内容 Each shard is in itself a fully-functional and independent "index" that can be hos
我有一个 Multi-Tenancy 系统,并且我正在尝试设计ElasticSearch以支持 Multi-Tenancy 。我已经在网上搜索过,但是我发现的所有帖子在实践中均未指定具体操作方法。 基
我已经在 kuberenetes 中使用散列分片设置了分片 MongoDB 集群。我首先创建了配置服务器 Replicaset,然后创建了 2 个分片副本集。最后创建了mongos来连接分片集群。 我
我在调试父子关系查询时遇到问题。我想知道调试问题的方法,而不是简单地发布我的映射、数据、查询并询问问题所在(但我最终保留这样做的权利!)。 为此,首先要检查我的 child 和关联的 parent 是
我正在启动一个 Django 项目,需要对多个可能包含太多行的表进行分片。我浏览了这里和其他地方的线程,并遵循了 Django 多数据库文档,但我仍然不确定它们是如何缝合在一起的。我的模型具有会被分片
我正在尝试使用 docker 创建 mongo 分片.我有: 配置服务器: docker run -it --rm --net=xnet -p 27016:27016 \ --hostname
我正在尝试在一台机器上配置分片,但在尝试添加分片时我不断收到错误消息。我使用以下网站作为引用:http://www.javahotchocolate.com/notes/mongodb-shardin
我刚接触 mongodb。由于我必须存储 +-5000 万份文档,我不得不设置一个带有两个副本集的 mongodb 分片集群 文档看起来像这样: { "_id" : "predefined_u
目前我们运行一个包含 2 个服务器 + 1 个仲裁器的 MongoDB 复制集。 我们在副本集的数据库中存储了大约 150 GB 的数据。 现在我们正在考虑何时开始分片。因为我们想知道是否存在不能再开
我需要并行处理某些项目,所以我使用 TPL Dataflow。 .要注意的是,共享相同键(类似于字典)的项目应按 FIFO 顺序处理,而不是彼此平行(它们可以与具有不同值的其他项目平行)。 正在完成的
问题涉及redis的分片配置。我已经用 Java 实现了一个小型测试应用程序,它以 user:userID 的形式在 Jedis 上创建了 100.000 个用户哈希。每个散列都有元素:姓名、电话、部
您好,我将使用多个 Redis 实例和实例之间的一些分片。 我的问题是,如果加载网页需要访问多个分片,性能是否会受到[明显的影响]。 我的基本概述是在多个 Redis 分片之间实现负载平衡*下面的脚注
Predis 声称拥有客户端分片(支持键的一致性散列)。 http://github.com/nrk/predis 我可以使用连接到一组配置文件(节点)来进行分片,但它不是一致的哈希。当我将另一个节点
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!