Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将数据库结构从SQL Server映射到DynamoDB_Sql Server_Nosql_Amazon Dynamodb - Fatal编程技术网

Sql server 将数据库结构从SQL Server映射到DynamoDB

Sql server 将数据库结构从SQL Server映射到DynamoDB,sql-server,nosql,amazon-dynamodb,Sql Server,Nosql,Amazon Dynamodb,我正在考虑使用NoSQL数据库来扩展数据库读取。请参见下面的关系数据库结构: CREATE TABLE Person( ID uniqueidentifier not null, Name varchar(100), DateOfBirth datetime) CREATE TABLE Sport ( ID uniqueidentifier not null, Description varchar(50)) -- e.g. F

我正在考虑使用NoSQL数据库来扩展数据库读取。请参见下面的关系数据库结构:

CREATE TABLE Person(
      ID uniqueidentifier not null, 
      Name varchar(100), 
      DateOfBirth datetime)

CREATE TABLE Sport (
      ID uniqueidentifier not null, 
      Description varchar(50)) -- e.g. Football; Tennis; Badminton etc

CREATE TABLE PersonPlaysSport (
      PersonID uniqueidentifier FOREIGN KEY REFERENCES Person(ID), 
      SportID uniqueidentifier FOREIGN KEY REFERENCE Sport (ID), 
      primary key (PersonID, SportID)
在上面的例子中,一个人做很多运动。在我的实际应用中;我有像这样的多对多关系,但表现不好

这些将如何存储在NoSQL文档数据库(DynamoDB)中?

免责声明-我不熟悉
DynamoDB
,但使用过其他几个NoSQL数据库

常用的方法是选择最重要的主题实体作为文档的
(在您的情况下,我会说这是

然后为每个人创建一个文档,并将包括所有关联实体(即链接体育)的“以人为中心”视图:

如果从以运动为中心的角度看待关系变得很重要(例如,你需要知道哪些人“订阅”了哪项运动):

  • 如果NoSql数据库允许,您可以尝试对
    Person.Sport
    进行二级索引。这将允许诸如“谁打高尔夫?”之类的查询,尽管这种方法在NoSql术语中经常不受欢迎

  • 或者,最好创建第二个文档集合,这次由
    Sport
    键入:


等。显然,当对
人员
运动
或它们之间的关系进行更改时,要使这两组文档保持最新状态还需要做额外的工作,但好处是在读取端具有高性能—只需检索一个文档即可拉取整个实体图—用SQL术语表示,这需要一个连接3个不同表的查询。

谢谢。如何将SQL Server与NoSQL数据库同步?我正在考虑这样做:即在NHibernate中使用EventListener和Interceptor。然而,我想知道是否有更好的方法。另外,我想问一下,您之所以避开DynamoDb,是否有具体的原因?我们没有避开Dynamo,只是我们主要使用的是内部数据库,比如MongoDB、Riak、Aerospike,以及最近的Cassandra。对于云托管的NoSql,我使用的是Azure的,例如表存储和DocumentDb。如果您已经在关系数据库中获得了大部分
主数据
,您可以尝试使用反应式流媒体方法来进行数据同步,而不是更改您的应用程序/程序。谢谢。你认为我的链接中描述的方法怎么样。我使用NHibernate作为ORM。但是,我可以切换到实体框架。这更像是我在业余时间的一种学习活动。我毫不怀疑它会很好地发挥作用。如果您已经将数据访问包装在
IRepository
类型层中,您还可以使用例如decorator模式来构建
combo
存储库来保持同步。该领域的另一种常见方法是通过使用服务总线的事件驱动体系结构-例如,每当拥有“人员”数据的系统更改人员时,它可以使用新的人员数据将消息发布到总线,然后其他感兴趣的系统(如支持NoSql的用户界面)可以订阅、塑造、,并按需要的方式存储数据。
Joe (Person, Keyed on a natural, or surrogate id).
+ Fields of Joe (Date of Birth, etc)
+ SportsPlayed: (Collection)
--> Golf (Sport)
--> Tennis (Sport)
Golf (Sport)
- Joe
- Jim
...