- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常高的插入率和更新率以及读取率的表。平均每秒插入和更新大约 100 行。每秒大约有 1000 次选择。
该表有大约 1 亿个元组。这是一个关系表,所以它只有大约 5 个字段。三个字段包含键,因此它们被索引。所有字段都是整数。
我正在考虑对数据进行分片,但是,它增加了很多复杂性,但确实提供了速度。另一种选择是使用 innodb。
该数据库在 256GB ssd 的 RAID 1 上运行,具有 32GB 1600mhz 的 RAM 和超频至 4Ghz 的 i7 3770k
数据库在高峰时间不断卡住,其中查询可能高达 200 行被插入或更新,每秒 2500 次选择
你们能指出我应该做什么吗?
最佳答案
分片通常是分配表大小的好主意。负载问题通常应通过复制数据环境来解决。在您的情况下,您的问题是a)巨大的表和b)表级锁定和c)糟糕的硬件。
InnoDB
如果您可以使用表上的一个键作为主键,那么 InnoDB 可能是一个不错的选择,因为他会让您进行行级锁定,这可能会减少您的查询相互等待。一个好的测试可能是将您的表复制到测试服务器并尝试针对他的所有查询,看看性能优势是什么。 InnoDB 的资源消耗率高于 MyISAM,因此请记住这一点。
硬件
对不起,伙计,但您的硬件无法满足您所需的性能。 Twitter 以 2.6k QPS 每秒执行 34 次写入。你不能在做 Twitter 的音量时并认为增强的游戏桌面会减少它。购买带有一些 SSD 驱动器的 15,000 美元的戴尔,您将能够突破 100,000 QPS。你现在正处于大时代。是时候放弃启动设备并为自己准备一台不错的服务器了。你不想分片。升级硬件会更便宜,坦率地说,你需要这样做。
分片
分片非常适合拆分大表。就是这样。
让我把坏事说清楚。 开发分片架构很烂 .你想尽一切可能来不是 分片。升级硬件,购买多台服务器并设置复制,优化你的代码,但看在上帝的份上,不要分片。您远远低于分片的性能线。当你的推力持续 30k+ QPS 时,我们就可以谈分片了。直到那天,NO。
您可以购买具有 16 核 5TB Fusion IO 和 256 GB RAM 的中端服务器(3 万美元 Dell PowerEdge),他将带您一路达到 200k QPS。
但是,如果你拒绝听我的话并且无论如何都要分片,那么这就是你需要做的。
规则 1:保持在同一个分片上(即选择分区规则)
分片后,您不希望跨多个分片访问数据。您需要选择一个分区规则,尽可能将您的查询保持在同一个分片上。在分布式数据环境中分发查询(规则 4)非常痛苦。
规则 2:构建分片映射并复制它
您的代码需要能够访问所有分片。根据你的分区规则创建一个分片映射,让你的代码知道去哪里获取他想要的数据。
规则 3:为分片编写查询包装器
你不想手动决定去哪个分片。写一个为你做的包装器。当你编写代码时,你会感谢自己。
规则 4:自动平衡
您最终需要平衡分片以保持最佳性能。事先为此做好计划并编写代码,目的是让你有一些 kron 工作来平衡你的分片。
规则 4:支持分布式查询
你不可避免地需要打破规则 1。当这种情况发生时,你需要一个查询包装器,它可以从多个分片中提取数据并将其聚合(带入)到一个地方。您拥有的分片越多,就越有可能需要多线程。在我的商店中,我们称之为分布式查询(即在多个分片上运行的查询)。
坏消息:没有用于执行分布式查询和聚合结果的代码。 Apache Hadoop 尝试过,但他很糟糕。 HiveDB 也是如此。一个好的查询分发器很难架构、难以编写、难以优化。这是公司每年要处理的数十亿美元的问题。我不拉屎,但如果你想出一个很好的包装器来跨分片分布查询,支持排序+限制子句并很好地扩展,你可能一夜之间成为百万富翁。卖30万美元?你门外有一英里长的队伍。
我的观点是分片很难而且很昂贵。这需要大量的工作,并且您想尽一切可能不进行分片。如果必须,请遵守规则。
关于mysql - MYISAM 分片与使用 InnoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13887770/
我是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
我是一名优秀的程序员,十分优秀!