- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我们有一个大约 70 GB 的 InnoDB 数据库,我们预计它会在未来 2 到 3 年内增长到数百 GB。大约 60% 的数据属于单个表。目前数据库运行良好,因为我们有一个 64 GB RAM 的服务器,所以几乎整个数据库都可以放入内存,但我们担心 future 数据量会变得相当大。现在我们正在考虑用某种方法来拆分表(尤其是占数据最大部分的表),我现在想知道,最好的方法是什么。
我目前知道的选项是
我们的应用程序基于 J2EE 和 EJB 2.1 构建(希望有一天我们会切换到 EJB 3)。
你有什么建议?
编辑(2011-02-11):
更新一下:目前数据库大小为 380 GB,我们的“大”表数据大小为 220 GB,其索引大小为 36 GB。因此,虽然整个表不再适合内存,但索引却可以。
系统仍然运行良好(仍然在相同的硬件上),我们仍在考虑对数据进行分区。
编辑(2014-06-04):还有一个更新:整个数据库的大小是 1.5 TB,我们的“大”表的大小是 1.1 TB。我们将服务器升级到具有 128 GB RAM 的 4 处理器机器(Intel Xeon E7450)。该系统仍然运行良好。我们接下来计划将大表放在单独的数据库服务器上(我们已经对软件进行了必要的更改),同时升级到具有 256 GB RAM 的新硬件。
此设置应持续两年。然后我们要么必须最终开始实现分片解决方案,要么只购买具有 1 TB RAM 的服务器,这应该会让我们持续一段时间。
编辑(2016-01-18):
我们已经把我们的大表放在它自己的数据库中,放在一个单独的服务器上。目前这个数据库的大小大约是 1.9 TB,另一个数据库(除了“大”表之外的所有表)的大小是 1.1 TB。
当前硬件设置:
此设置的性能很好。
最佳答案
一旦 42 GB 表不再适合内存,您肯定会开始遇到问题。事实上,一旦它不再适合内存,性能就会迅速下降。一种测试方法是将该表放在另一台 RAM 较少的机器上,看看它的性能有多差。
First of all, it doesn't matter as much splitting out tables unless you also move some of the tables to a separate physical volume.
这是不正确的。分区(通过 MySQL 5.1 中的功能,或者使用 MERGE 表的相同功能)可以提供显着的性能优势,即使这些表位于同一驱动器上。
例如,假设您正在使用日期范围在大表上运行 SELECT 查询。如果表是整个表,查询将被迫扫描整个表(在那个大小下,即使使用索引也会很慢)。分区的优点是您的查询只会在绝对必要的分区上运行。如果每个分区大小为 1 GB,而您的查询只需要访问 5 个分区即可完成自身,那么对于 MySQL 来说,组合的 5 GB 表比 42 GB 的怪物版本更容易处理。
您需要问自己一件事是如何查询数据。如果您的查询有可能只需要访问某些数据 block (即日期范围或 ID 范围),那么某种分区将证明是有益的。
我听说 MySQL 5.1 分区仍然存在一些错误,特别是与 MySQL 选择正确的键有关。 MERGE 表可以提供相同的功能,尽管它们需要稍微多一点的开销。
希望能有所帮助……祝你好运!
关于MySQL Partitioning/Sharding/Splitting - 走哪条路?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45879/
粗略地说,单向数据绑定(bind)只是与 ng-model 绑定(bind)。当涉及 Controller 时,在页面内和 2-way 内。有人可以向我解释这个概念,以便我真正了解如何看待它吗?还有什
我想知道是否有任何替代 2 向 SSL 的方法。 2 向 SSL 是确保客户端和服务器可信通信的唯一选择吗?我有一个自签名证书供我的客户使用,我能否将自签名证书重新用于 2 种 SSL 方式,还是应该
如果是这样,你如何设置认证证书,你需要什么文件?是 .pfx 吗?您将如何在浏览器中安装它?一直试图通过浏览器测试 2 路 ssl。我有一个网络服务,尝试连接时总是返回认证身份验证失败。 最佳答案 扩
我希望能够对 XHTML 文档进行三向合并: 从文档的一些原始副本开始 一个用户编辑原始文档的副本 另一个用户编辑原始文档的单独副本 需要一个工具来合并(自动和/或可视化)两个用户所做的更改。 注意:
我有 4 张 table : ad (id, ...) website (id, title, URL, ...) space (id, website_id, ...) ad_space_count
我在 java 中有一个无状态服务,部署在 tomcat 网络服务器中,我还配置了 2 路 ssl 验证。到目前为止,一切正常。当我有一个新客户端时,我只需要将新客户端证书放入我的 trustore
我已经创建了一个带有证书的信任库和带有私钥的 keystore 。我已经放置了以下代码,加载了 trsustore 管理器和 keystore 管理器,然后创建了 SSL 上下文的实例。 每当我向网络
如果我在仅服务器身份验证中正确理解 SSL/TLS,握手后,服务器会向客户端发送它的公钥和由 CA 签名的数字签名证书。如果客户端有这个 CA 的公钥,它就可以解密证书并与服务器建立信任。如果它不信任
我有 Nginx,它使用双向 TLS 代理从客户端到 IBM DataPower 的请求。 从 Nginx 向 IBM DP 发送消息时出现错误:sll server (SERVER) ssl pee
我刚刚开始了一个项目,让我的雇主成为一个管理软件。我有一个琐碎但可能很简单的查询,我似乎找不到任何相关信息。 在对象之间建立“具有”关系的两种方式是否谨慎/良好做法。例如,Client 对象“有一个”
我在设置双向 SSL 身份验证时遇到问题。 我需要从 wso2 企业集成商访问 HTTPS 端点。 服务提供商给了我一个 pfx keystore ,其中包含我必须提供给服务器的证书和私钥。 我在我的
我正在为小型 PoC 构建 AWS Lambda 服务。 PoC 中的流程是: 通过 POST 获取(文本)输入, 执行小字符串操作 + 将操纵值存储到 DynamoDB 中,然后 通过 HTTP P
我的任务是在 Java 上下文中实现双向 TLS。我找到了一个示例 ( https://www.opencodez.com/java/implement-2-way-authentication-us
我正在尝试测试一个非常简单的双向 IM 应用程序。客户端在 android 上,服务器在我的 PC(java)上。我已经在 PC 到 PC 之间用 java 测试了这个应用程序,它工作正常。 但是在我
我有 java web 服务支持2-way ssl auth。所以我有客户端 keystore (client.p12),服务器证书在受信任的存储区中,服务器 keystore 中的客户端证书在受信任
通过 HTTPS 使用 Web 服务 我们有一个我们正在使用的网络服务。 Webservice 可以在 HTTP 和 HTTPS 协议(protocol)上运行。使用 HTTP 没问题,但如何使用 H
我在 Node.js 上有一个后端服务器,我正在尝试在 Nginx 和这个后端服务器之间设置 2 路 SSL。 但是我得到一个错误:2015/11/02 06:51:02 [错误] 12840#128
我一直在尝试连接到启用了 2 路 SSL 的服务端点。我正在使用 Spring resttemplate。我已将证书添加到 keystore 中,但出现以下错误: >org.springframewo
从 CherryPy 3.0 开始,只需指向服务器证书和私钥即可启用单向 SSL,如下所示: import cherrypy class HelloWorld(object): def ind
这个问题来自:MySQL Number of Days inside a DateRange, inside a month (Booking Table) 我有一个包含以下数据的表: CREATE
我是一名优秀的程序员,十分优秀!