gpt4 book ai didi

mysql - 只有 Mysql OR mysql+sqlite OR mysql+自己的解决方案

转载 作者:可可西里 更新时间:2023-11-01 08:37:20 28 4
gpt4 key购买 nike

目前我正在构建相当大的网络系统,我需要强大的 SQL 数据库解决方案。我选择 Mysql 而不是 Postgres,因为一些任务需要只读(MyISAM 引擎)而其他任务需要大量写入(InnoDB)。

我对这个只读功能有疑问。它必须非常快。用户必须在不到一秒的时间内得到答案。假设我们有一个索引良好的表,名为“object”,行数不超过 1000 万,另一个名为“element”的表,行数约为 1.5 亿。我们还有一个名为“element_object”的表,其中包含将表“element”中的对象与表“object”(数亿行)连接起来的信息

所以我们要对表“element”和“element_object”进行分区,得到 8192 个表“element_hash_n{0..8191}a ”和 24576 个表“element_object_hash_n{0..8191}_m{0..2}”。

用户问题的答案需要两步搜索:

  1. 从表“element_hash_n”中找到元素的 id
  2. 在表“object”上执行主 sql 选择并与表“element_object..hash_n_m”连接以使用找到的(从第一步)ID 过滤结果

我想知道第一步:什么会更好:

  1. 在 mysql 中存储(全部)超过 32k 个表
  2. 创建一个 sqlite 数据库并在其中存储 8192 个表以用于第一步目的
  3. 创建 8192 个不同的 sqlite 文件(数据库)
  4. 在文件系统中创建 8192 个文件并制作自己的二进制解决方案以查找 ID。

对不起我的英语。它不是我的母语。

最佳答案

我想你让位给了很多分区。如果您有超过 32000 个分区,您将面临巨大的管理开销。给定名称 element_hash_* 它就像您想对元素进行散列并以此方式对其进行分区一样。但是散列会给你一个(很可能)在所有分区上均匀分布的数据。我看不出这应该如何提高性能。如果您的数据是通过所有这些分区访问的,那么通过内存大小的分区不会获得任何好处 - 您将需要从另一个分区加载每个查询数据。

我们在事务系统上使用分区,其中超过 90% 的查询使用当天作为条件。在这种情况下,基于天的分区工作得很好。但是我们只有 8 个分区,然后将数据移动到另一个数据库以进行长期存储。

我的建议:尝试快速找出需要哪些数据并将其组合在一起。您将需要进行自己的性能测试。如果以如此快的速度交付数据如此重要,那么应该有足够的管理支持来构建一个像样的测试环境。也许您的测试结果会表明您根本无法使用关系数据库系统足够快地传送数据。如果是这样,您应该查看 NoSQL(如 Not only SQL)解决方案。

您使用什么技术构建您的网络系统?您也应该测试这部分。如果您在性能不佳的 Web 应用程序中浪费时间,那么超快的数据库对您没有多大帮助。

关于mysql - 只有 Mysql OR mysql+sqlite OR mysql+自己的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8619700/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com