我有一个学区数据库(大约15,000个并且还在增长)以及每个学校员工可以享受的退休计划/福利。数据很好地规范化了:
现在客户想报告。他们希望以一种非常动态的方式进行报告(想想一下iTunes智能播放列表,可以为任何地区,计划或受益的任何财产添加/删除规则)。我需要允许他们查询某个地区的任何财产,退休计划或其福利,并返回所有内容。
为了保持简单(暂时)并避免重复数据,我设置了几个视图(嘘,我知道),只允许我以任何1区记录有效的方式访问数据与all_retirement_plans
视图的1对1关系和带有all_benefits_plans
视图的1对1记录。这给了我一组干净的连接,从而产生统一的结果集,但显然它带有一系列问题,我很快就会遇到这些问题......
即,随着更多数据的添加,它会变得荒谬。
我正在寻找关于非规范化的一些建议。我已经考虑过一个报告表来执行视图所做的事情,但可以编制索引。我还想过将整套区数据转储到MongoDB(或类似的)。我确信还有其他选择,但我会参加试错游戏,所以我希望有人能以一种让我处于合理解决方案范围内的方式为我提供建议。
最重要的是,我需要能够存储大约15,000个(并且正在增长的)区域记录以及大量其他元数据,然后在非常精细的级别上报告该数据。除了我自己的想法带给我的任何人有任何想法或建议吗?我正试图超越我知道即将到来的问题。
答案 0 :(得分:0)
我希望这会有所帮助,因为我最近做了很多工作,将数据从关系转移到面向文档(非规范化)。
将数据移动到Mongo的一些选项:
您可以轻松地将数据从MySQL写入Mongo并保留关系表。没有转换,只是直接移动数据。 Mongo具有可以输出到新集合的map / reduce。虽然这很慢。 =(如果直接移动视图,Mongo有一个聚合框架,它对于生成新文档非常有用。
理想情况下,您可以在MySQL中编写“文档”,然后移动它们。我使用MySQL的经验是使文档非常平坦。您可以通过group_concat创建来添加结构。你基本上将group_concat的一些数据和手动JSON字符串放在一起。 (很丑,但确实有效)
Mongo在处理文档时非常。真的,真的很棒。如果你想使用非规范化数据,我强烈推荐它。
这可能有些过分,但我们使用Mule ESB将数据从MySQL移动到Mongo。你可以在那里进行更复杂/棘手的转换,但是有一个学习曲线。
在SQL Server中,您可以将查询输出为XML。如果您可以在MySQL中找到一个可以执行此操作的库,那么从XML到JSON很容易。我们已经能够在SQL Server中运行超过100k的记录并快速输出XML。
如果您想了解有关任何要点的详细信息,请与我们联系。 =)