出于可扩展性原因,我计划将我们的人/地址/电话数据库从Sql Server迁移到NoSQL数据库。
我们目前拥有AWS和Azure上的所有基础架构,我们正计划保持这种方式。因此,我开始研究AWS和Azure提供的工具,但我很怀疑并希望能得到一些帮助。
这是我们表格的基本结构:
人 ID, 名称, 姓, DOB, 工作, 电子邮件地址, 国籍, 出生城市, 等...
地址 PERSONID, 街, 数, 邮政编码, 市, 等...
电话 PERSONID, 数, 区号, 运营商, 等...
查询: 我们执行的主要查询是根据Person(DOB,Job等),Address(ZipCode Range,State,City等)和Telefone(Carrier,Telefone Type等)表中的列获取人员。我们过滤需要每天选择数百万条记录来生成我们的应用程序要处理的数据。
我的典型查询返回以下列:
人员表:身份证,姓名,姓氏,DOB,工作,电子邮件地址,国籍,CityOfBirth
地址表:街道,号码,ZipCode,城市,州
电话桌(每人5个电话号码):Number,AreaCode,Carrier
查询通常从5k~15k记录返回,我们需要获取完整的结果集。
我们还每周对电话数据进行更新,添加/删除/更新电话号码。我们在周末这样做是为了避免影响生产应用程序的性能。
据我所知,我必须对此结构进行非规范化,以便于查询和提高读取性能。因此,我开始评估两个云提供商的可能解决方案:
AWS DynamoDB 根据我的理解,我无法对多个属性实现查询,并且可以创建索引的限制。我想不出一种模拟数据的方法,以便使用提到的过滤器进行快速查询。
在我看来,我可以对最重要的字段执行查询,然后对其余字段应用过滤。鉴于我有5000万条记录,我不确定它是否是最佳的。
或者是否有其他AWS服务可以帮助我实现理想的行为?
Azure DocumentDB 由于它存储了由所有属性索引的JSON对象,因此我可以采用这种方式。我应该比KEY / Value Tables性能更差,并且我不了解每天查询数百万条记录时的实际性能。
同样,我不确定是否有其他服务可以在Azure上提供更好的结果。
结论: 我想得到一些可以引导我走向正确方向的见解。我似乎有一些关于Elasticsearch等的问题可以帮助解决这个问题,但我不确定它是否会提供我希望的性能以及它是否真的是它的用途。
目标 推动我们寻找替代方案的原因是利用云的灵活性。现在我们保留一个大型SQL Server 24/7来托管我们应用程序的核心数据。我们希望提高查询性能并降低服务器成本。
不确定NoSQL是什么方式,或者在SQL Server上保留数据结构的变化。
任何帮助将不胜感激!
提前致谢!