jjzjj

mysql - 非规范化建议

coder 2023-10-14 原文

我有一个学区数据库(大约 15,000 个,并且还在不断增加)以及每个学区的员工可用的退休计划/福利。数据已经很好地归一化了:

  • 区记录与 0 或 n 个退休计划选项相关联(其中 n < 10="" 分布在="" 3="">
  • 一个地区记录与 0 或 n 个 yield 相关联(其中 n 接近 1 个连接表中的 40)
  • 地区还与其他一些事物相关联,其中关联的数量是名义上的。

现在客户要报告。他们希望以一种非常动态的方式进行报告(想想 iTunes 智能播放列表,可以在其中为任何地区、计划或福利的任何属性(property)添加/删除规则)。我需要允许他们查询某个地区的任何属性(property)、其退休计划或其福利,并返回一切

为了(暂时)保持简单并避免重复数据,我设置了几个 View (嘘,我知道),它们只允许我以任何 1 个地区记录有效的方式访问数据与 all_retirement_plans View 的一对一关系以及与 all_benefits_plans View 的一对一记录。这给了我一组干净的连接,产生了一个统一的结果集,但显然有它自己的一组问题,我将尽快解决这些问题......

即,随着添加更多数据,它会变得可笑慢。

我正在寻找有关反规范化的一些建议。我考虑过一个报告表,该表可以执行 View 的操作,但可以编制索引。我还考虑过将这整套地区数据转储到 MongoDB(或类似数据库)中。我确信还有其他选择,但我会玩试错游戏,所以我希望这里有人能给我建议,让我能够找到一个合理的解决方案。

最重要的是,我需要能够存储大约 15,000 个(并且还在不断增加)的地区记录以及大量额外的元数据,然后以非常精细的级别报告这些数据。除了我自己的想法之外,任何人都有任何想法或建议吗?我正在努力解决我知道即将出现的问题。

最佳答案

我希望这对我有所帮助,因为我最近在将数据从关系数据转移到面向文档(非规范化)方面做了很多工作。

将数据移动到 Mongo 的一些选项:

  1. 您可以轻松地将数据从 MySQL 写入 Mongo 并保留您的关系表。没有转换,只是直接移动数据。 Mongo 具有可以输出到新集合的 map/reduce。虽然很慢。 =( 如果直接移动一个 View ,Mongo 有一个聚合框架,对于生成新文档非常强大。

  2. 理想情况下,您可以在 MySQL 中编写您的“文档”,然后将它们移至此处。我用MySQL的经验是把文档做得很扁平。您可以通过使用 group_concat 发挥创意来添加结构。您基本上将一些数据和手动 JSON 字符串组合在一起。 (丑陋,但它有效)

  3. Mongo 非常擅长处理文档。真的,真的很棒。如果您想处理非规范化数据,我强烈推荐它。

  4. 这可能有点矫枉过正,但我​​们使用 Mule ESB 将数据从 MySQL 移动到 Mongo。您可以在那里进行更复杂/棘手的转换,但有一个学习曲线。

  5. 在 SQL Server 中,您可以将查询输出为 XML。如果您可以在 MySQL 中找到一个库来执行此操作,那么从 XML 到 JSON 就很容易了。我们已经能够在 SQL Server 中运行超过 10 万条记录的查询并非常快速地输出 XML。

如果您想了解有关任何要点的更多详细信息,请告诉我。 =)

关于mysql - 非规范化建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14988165/

有关mysql - 非规范化建议的更多相关文章

  1. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  2. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  3. ruby - gem 规范失败 - 2

    我正在为毕业设计开发GEM,TravisCI构建不断失败。这是我在Travis上的链接:https://travis-ci.org/ricardobond/perpetuus/builds/8709218构建错误是:$bundleexecrakerakeaborted!Don'tknowhowtobuildtask'default'/home/travis/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in`eval'/home/travis/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_

  4. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  5. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  6. ruby-on-rails - 我需要从 HTML 转到 markdown,有什么建议吗? - 2

    我正在使用Maruku,将Markdown(超集)转换为HTML,你知道我该怎么做才能从HTML转换为Markdown吗? 最佳答案 Google发现了一个名为reverse_markdown的ruby​​脚本.它似乎可以满足您的需求。 关于ruby-on-rails-我需要从HTML转到markdown,有什么建议吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/175162

  7. ruby-on-rails - 当我通过 rvm 使用 rails3 时,如何在 ubuntu 上安装 mysql2 gem? - 2

    我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。

  8. ruby - 如何禁止在 RSpec 中显示挂起(跳过)的规范? - 2

    我有几个跳过的规范。Pending:(Failureslistedhereareexpectedanddonotaffectyoursuite'sstatus)1)...#Notyetimplemented#./spec/requests/request_spec.rb:22如何抑制未决规范的输出? 最佳答案 您可以添加以下配置选项以从运行中过滤掉所有待处理的规范:RSpec.configuredo|config|config.filter_run_excludingskip:trueend此外,here是一个更详细的抑制输出的建议

  9. ruby-on-rails - 从帮助器规范中 stub 一个帮助器方法 - 2

    我正在构建Rails应用程序并使用RSpec制定测试。我为我正在创建的名为current_link_to的方法编写了测试。此方法应该检查当前页面是否对应于我传递给它的路径,并将current类添加到生成的链接中,以防它匹配。这是规范:require"spec_helper"describeApplicationHelperdodescribe"#current_link_to"dolet(:name){"Products"}let(:path){products_path}let(:rendered){current_link_to(name,path)}context"whenthe

  10. ruby-on-rails - 在 RSpec 中编写请求规范的正确方法是什么? - 2

    tl;dr:跳到最后一段最近一直在尝试使用RSpec的requestspecs做一些更有针对性的测试。我的测试主要是这样的:通用cucumber功能规范,即用户转到带有评论的帖子,对评论点赞,作者获得积分modelspecs当模型实际上具有某些功能时,即User#upvote(comment)controllerspecs我在其中stub了大部分内容,只是试图确保代码按照我期望的方式运行viewspecs当View中有一些复杂的东西时,例如仅在用户尚未投票时呈现upvote链接,这些被stub为好吧问题是当我有一些导致错误的特定场景时,一切似乎都在我无法重现它的模型/View层中工作。

随机推荐