我打算将我们的人/地址/电话数据库从Sql Server转移到NoSQL数据库,以实现可扩展性 .

我们目前拥有AWS和Azure上的所有基础架构,我们正计划保持这种方式 . 因此,我开始研究AWS和Azure提供的工具,但我有疑问并希望能得到一些帮助 .

这是我们表格的基本结构:

Person ID,姓名,姓氏,DOB,工作,EmailAddress,国籍,CityOfBirth等等...

Address PersonId,Street,Number,ZipCode,City等...

Telephone PersonId,Number,AreaCode,Carrier等...


Queries: 我们执行的主要查询是根据Person(DOB,Job等),Address(ZipCode Range,State,City等)和Telefone(Carrier,Telefone Type等)表中的列获取人员 . 我们过滤需要每天选择数百万条记录来生成我们的应用程序要处理的数据 .

我的典型查询返回以下列:

人员表:ID,姓名,姓氏,DOB,工作,EmailAddress,国籍,CityOfBirth

地址表:街道,数字,ZipCode,城市,州

电话表(每人5个电话号码):Number,AreaCode,Carrier

查询通常从5k~15k记录返回,我们需要获取完整的结果集 .

我们还每周对电话数据进行更新,添加/删除/更新电话号码 . 我们在周末这样做是为了避免影响 生产环境 应用程序的性能 .

据我所知,我必须对此结构进行非规范化,以便于查询和提高读取性能 . 所以我开始评估两个 Cloud 提供商的可能解决方案:

AWS DynamoDB 根据我的理解,我无法对多个属性实施查询,并且可以创建索引的限制 . 我想不出一种模拟数据的方法,以便使用上面提到的过滤器进行快速查询 .

在我看来,我可以对最重要的字段执行查询,然后对其余字段应用过滤 . 鉴于我有5000万条记录,我不确定它是否是最佳的 .

或者是否有其他AWS服务可以帮助我实现理想的行为?

Azure DocumentDB 由于它存储了由所有属性索引的JSON对象,因此我可以采用这种方式 . 我应该比KEY / Value Tables性能更差,并且我不了解每天查询数百万条记录时的实际性能 .

同样,我不确定是否有其他服务可以在Azure上提供更好的结果 .

Conclusion: 我想获得一些有助于我走向正确方向的见解 . 我似乎有一些关于Elasticsearch等问题可以帮助解决这个问题,但我不确定它是否会给出我希望的性能,以及它是否真的是它的目的 .

Objective 促使我们寻找替代方案的是利用 Cloud 的灵活性 . 现在我们保留一个大型SQL Server 24/7来托管我们应用程序的核心数据 . 我们希望提高查询性能并降低服务器成本 .

不确定NoSQL是什么方式,或者在SQL Server上保留数据结构的变化 .

任何帮助,将不胜感激!

提前致谢!