在这种情况下,单个 SQL DB 或多个 SQL CE DB 哪个更好

Posted

技术标签:

【中文标题】在这种情况下,单个 SQL DB 或多个 SQL CE DB 哪个更好【英文标题】:Which is better single SQL DB or multiple SQL CE DBs in this scenario 【发布时间】:2011-04-17 02:41:37 【问题描述】:

我有一个网站,人们将使用它来存储他们的业务统计数据并从中生成报告。其中一些很少相关。这些集合很少被多个用户使用。出现了三种设计

    使用单个 SQLDB 并将所有用户数据存储在同一数据库中,并从那里生成报告。 为每个信息集使用一个 SQL CE db。 多个 SQL Server 数据库一个用于集合

应用程序位于 ASP.NET 中,并将作为公共服务托管。预计流量将增长到数千个信息集。 如果有的话,请建议最好的和替代的

【问题讨论】:

所有选项都可以实现数据的隔离。需要在不影响其他用户的情况下快速访问和易于插入和更新。 【参考方案1】:

我会说一个 sql server db,然后使用多个“实例”或“模式”来分离不同的用户。因为人们正在上传他们的业务数据,所以您希望将其隔离开来,并确保一个人几乎不可能访问另一个人。您可能想要做一些模拟或类似的事情来保持所有连接细节(因为它会是不同的用户或每个客户端类似的东西)都分开。

我不认为 CE 是为大量数据而设计的,我知道它只是将所有内容存储在平面文件中。您可能希望使用 sql server 来利用所有特殊功能(阅读 SSIS 和 s-s-rS)。

多个 sql server 数据库将产生巨大的巨大开销,并且您需要大量的后端能力。

【讨论】:

好点。 WRT 隔离数据,在实践中,我发现你最终会产生同样大的风险,试图确保正确的客户连接到正确的数据库实例。【参考方案2】:

通过索引在DB中查找记录的复杂度约为O(log(N)) 因此,如果您将所有数据存储在单个数据库中,则每个用户都在为与其他用户坐在同一个数据库中付出代价,因为它是所有用户记录总数的函数。对数(左右)但仍然。

因此,单独的数据库具有更好的可扩展性。您甚至可以在不停止世界的情况下逐个更新 DB 的结构。或者放置额外的盒子为他们自己的用户范围服务。如果需要当然可以。

那是理论。实践取决于您的文件系统在查找文件方面的效率以及打开/关闭数据库的成本。 AFAIR 在 SQLite 中这些操作相对便宜。

【讨论】:

这听起来不错,但它在 ASP.NET 4.0 场景中将如何工作。数据访问会更快吗?在这种情况下,SQLLite 和 CE 有什么区别【参考方案3】:

我已经针对不同的应用采用了两种方法,我的经验是,有点违反直觉,最好拥有一个数据库并混合数据。其中一个案例是医疗账单信息、显示和维护多种实践的患者记录,因此安全性和精细访问至关重要。

一些原因:

架构设计中的任何更改都可以在一个地方实现一次。

使用数据库接口的软件更改同上。 (当然,您可以将大部分内容抽象出来,但谁真正做到了?)

您正在创建一个实现一系列软件连接性开关的需求,以处理像表格中的字段一样更容易和更清晰的客户区别。

管理更少而不是更多的数据库更简单。

在添加和删除客户时,向表中添加一行与安装一个全新的数据库及其所有管理和维护资源和配置之间的区别。

(注意:这也是关于该主题的一个线程中的“SQL 悲观化”之一。)

【讨论】:

感谢您的回答,如果我们有很多人访问数据会有什么影响?我需要网页上的快速报告解决方案。用户数可以达到 100000-1000000 个用户的范围。在任何给定时间点,最多可以有 1000 个用户访问报告。会不会很快

以上是关于在这种情况下,单个 SQL DB 或多个 SQL CE DB 哪个更好的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在 Laravel 迁移中的单个 DB::statement("Query 1; Query 2") 中使用多个 SQL 查询吗?

如何在 DB2 的单个更新语句中更新多个列

在没有 PureQuery 的情况下对 DB2 执行静态 SQL 查询

SQL:单个人存在多个地址。如果存在则选择当前地址,否则选择永久地址

在这种情况下如何避免死锁?

单个SQL查询,用于更新多个字段值