Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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
C# 使用mssql数据库复制的dotNET项目的最佳实践_C#_Entity Framework_Nosql_Replication - Fatal编程技术网

C# 使用mssql数据库复制的dotNET项目的最佳实践

C# 使用mssql数据库复制的dotNET项目的最佳实践,c#,entity-framework,nosql,replication,C#,Entity Framework,Nosql,Replication,我正在使用C#,实体框架4,mssql进行一个web项目。 当数据越来越大时(不是很大,但单台服务器很难实现), 我们决定对数据访问层进行一些更改,以提高吞吐量和性能 因为将数据库更改为nosql数据库对重构来说代价高昂, 我们计划使用数据库复制,这是我以前从未使用过的 我们是否应该使用多个“连接字符串”,程序员根据“读”或“写”操作显式使用这些字符串 读奴隶会导致“脏”读吗 有没有其他最佳实践能够以最小化的重构成本来处理这个问题 我们不限于mssql服务器 ps:我们没有太多的表,但是有一

我正在使用C#,实体框架4,mssql进行一个web项目。 当数据越来越大时(不是很大,但单台服务器很难实现), 我们决定对数据访问层进行一些更改,以提高吞吐量和性能

因为将数据库更改为nosql数据库对重构来说代价高昂, 我们计划使用数据库复制,这是我以前从未使用过的

  • 我们是否应该使用多个“连接字符串”,程序员根据“读”或“写”操作显式使用这些字符串
  • 读奴隶会导致“脏”读吗
  • 有没有其他最佳实践能够以最小化的重构成本来处理这个问题
我们不限于mssql服务器


ps:我们没有太多的表,但是有一些社交数据足够大,很难将表/数据库分开。

你不需要NoSQL,你需要摆脱“数据库综合症”:

这意味着,您可以拥有一组较小的数据库,而不是一个大型数据库。我很确定你们的系统有很多不同的问题。例如:账单、运输等

为什么不将这些关注点分离到不同的数据库中?因此,您的“计费”子系统将拥有自己的数据库“shipping”-另一个,无论您拥有多少

现在扩展起来容易多了:如果需要,您可以简单地将它们分别放在一个单独的服务器上,或者为一个重要的服务器提供一个专用硬件,然后将其余的放在一起,等等

管理起来也会容易得多:您可以在一个上下文中单独更改内容,而不会影响其他上下文

这就是“最佳实践”,也是SOA风格的一部分;)

另一个(在我看来不太可取)是所谓的“水平切分”。比如说,您的系统使用“项目”运行,您可以简单地将每个“项目”(及其所有数据)放入单独的数据库中。
它也会起作用,但并不适合所有东西,而且有自己的窍门。

@alexey raga谢谢你的建议!我们确实按业务领域划分了一些数据,但仍有一些大数据。我们有一些社会数据,比如“谁跟谁”,“谁和谁在同一个群体”(团体是UGC),这些数据不可能很容易地分离,很难把热和冷区分开来,但是查询远不止写,这就是为什么我考虑复制。关于SOA,当我们分发数据时,我们是否需要一些数据库级别的同步框架?例如用户和组织,这应该在大多数业务领域中使用。那么为什么不将它们分开呢?如果您的查询远远多于编写,那么为什么要使用规范化数据进行查询呢?这总是很困难的!为什么不将数据写入SQL,然后异步地、连续地将其转换为可读性好的内容?基本上,您只需执行一次,而不是在每个查询中执行。它被称为“投影数据”。例如,将“who followed who”投影到graph db中并从中进行查询。您只需要另外一个步骤:一旦写入新数据,您就可以将其“翻译”为可读友好的存储并更新可读模型。“真相的来源”仍然是您的SQL数据,您应该能够通过再次投影此数据从SQL从头开始重建读取模型。但是,当您不断地执行此操作时,它的作用域要小得多(与SQL查询相反),所以速度要快得多。然后,您的客户将能够从一个易于阅读且快速的模型中进行阅读,而忘记那些缓慢而复杂的查询:)