小编RDF*_*ozz的帖子

数十亿行数据的最佳数据库和表设计

我正在编写一个需要存储和分析大量电气和温度数据的应用程序。

基本上,我需要存储过去几年和未来数万个地点的大量每小时用电量测量值,然后以不太复杂的方式分析数据。

我需要(目前)存储的信息是位置 ID、时间戳(日期和时间)、温度和电力使用情况。

关于需要存储的数据量,这是一个近似值,但大致如下:
20 000 多个位置,每月 720 条记录(每小时测量,每月大约 720 小时),120 个月(10 年前) ) 和未来许多年。简单的计算得出以下结果:

20 000 个位置 x 720 条记录 x 120 个月(10 年前)= 1 728 000 000 条记录

这些是过去的记录,新记录将每月导入,因此每月大约有 20 000 x 720 = 14 400 000 条新记录

总位置也将稳步增长。

对于所有这些数据,需要执行以下操作:

  1. 检索特定日期和时间段的数据:某个位置 ID 在 01.01.2013 和 01.01.2017 之间以及 07:00 和 13:00 之间的所有记录。
  2. 特定日期和时间范围的简单数学运算,例如 MIN、MAX 和 AVG 温度以及特定位置 ID 5 年 07:00 至 13:00 之间的用电量。

数据将每月写入一次,但会被数百名用户(至少)不断读取,因此读取速度更为重要。

我没有使用 NoSQL 数据库的经验,但从我收集到的信息来看,它们是此处使用的最佳解决方案。我已经阅读了最流行的 NoSQL 数据库,但由于它们完全不同,并且还允许非常不同的表架构,我一直无法决定使用什么是最好的数据库。

我的主要选择是 Cassandra 和 MongoDB,但由于我的知识非常有限,而且在大数据和 NoSQL 方面没有实际经验,我不太确定。我还读到 …

nosql database-design database-recommendation

104
推荐指数
5
解决办法
16万
查看次数

什么是 WITH CHECK CHECK 约束?

我有一些自动生成的 T-SQL,这可能是有效的,但我不太明白。

ALTER TABLE [dbo].[MyTable]
WITH CHECK
CHECK CONSTRAINT [My_FORIEGN_KEY];
Run Code Online (Sandbox Code Playgroud)

我知道什么是外键约束,但什么是外键约束CHECK CHECK

sql-server constraint t-sql

31
推荐指数
1
解决办法
4万
查看次数

为什么 BULK INSERT 被认为是危险的?

我想了解为什么一般的网络安全团队(我接触过的不止一个组织)坚决反对BULK INSERT向应用程序和数据库程序员授予(例如 TSQL)权限?我无法相信“填补磁盘滥用”的借口,除非我遗漏了一些东西,因为最终结果与执行以下操作的应用程序没有什么不同:

for (long i = 0; i < LONG_MAX; ++i)
    executeSQL("INSERT INTO table VALUES(...)");
Run Code Online (Sandbox Code Playgroud)

并且INSERT是一种常见的DML命令,任何人都基本写权限才能执行。

为了应用程序的利益,BULK INSERT它更高效、更快,并且使程序员无需解析 SQL 之外的文件。

编辑:我最初在信息安全站点上问这个问题是有原因的 - 不是 DBA 反对使用 BULK INSERT,而是“信息保证”(简称 IA - 网络安全人员)迫使这个问题。我会让这个问题再讨论一两天,但如果批量操作确实绕过约束或触发器,我可以看到这是一个问题。

sql-server permissions import bulk-insert

22
推荐指数
3
解决办法
2万
查看次数

文件组和将文件组设置为只读的好处

有人可以给我举一个真实世界的场景,当将多个文件组更改为只读是一个不错的选择以及何时使用它们?如果将其设置为只读有什么好处?

在具有多个文件组的数据库上,您是否必须备份整个数据库并备份该文件组的每个文件?您还可以举一个何时使用文件组备份的示例吗?当您可以备份整个数据库时,我不明白为什么备份文件组会有所帮助。希望我能获得一个真实世界的体验,这个文件组备份是理想的

sql-server filegroups

12
推荐指数
1
解决办法
4522
查看次数

查找以编程方式连接表所需的所有连接

给定一个 SourceTable 和一个 TargetTable,我想以编程方式创建一个需要所有连接的字符串。

简而言之,我试图找到一种方法来创建这样的字符串:

FROM SourceTable t
JOIN IntermediateTable t1 on t1.keycolumn = t.keycolumn
JOIN TargetTable t2 on t2.keycolumn = t1.keycolumn
Run Code Online (Sandbox Code Playgroud)

我有一个查询返回给定表的所有外键,但是在尝试递归运行所有这些以找到最佳连接路径并生成字符串时遇到了限制。

SELECT 
    p.name AS ParentTable
    ,pc.name AS ParentColumn
    ,r.name AS ChildTable
    ,rc.name AS ChildColumn
FROM sys.foreign_key_columns fk
JOIN sys.columns pc ON pc.object_id = fk.parent_object_id AND pc.column_id = fk.parent_column_id 
JOIN sys.columns rc ON rc.object_id = fk.referenced_object_id AND rc.column_id = fk.referenced_column_id
JOIN sys.tables p ON p.object_id = fk.parent_object_id
JOIN sys.tables r ON r.object_id = fk.referenced_object_id
WHERE fk.parent_object_id = OBJECT_ID('aTable')
ORDER …
Run Code Online (Sandbox Code Playgroud)

sql-server system-tables sql-server-2014 recursive

9
推荐指数
1
解决办法
1626
查看次数

可以删除 MSDB 吗?

我不是 DBA,我只是在谷歌上搜索了 MSDB 所做的事情,它基本上是其工作和历史记录的 SQL 代理的数据库,现在我的云服务器空间不足,我有 1 年的 MSDB 2017 年, 可以删除它还是保留它用于备份?

我的 MSDB 是 250GB 硬盘中的 93GB。

sql-server msdb

9
推荐指数
2
解决办法
2544
查看次数

从 Access .accdb 文件导入到 SQL Server

如何将数据从 Access.accdb文件导入SQL Server?在 SQL Server 导入和导出向导中我应该选择什么?

在此处输入图片说明

假设我们选择 OLE DB Provider for SQL Server Integration Services,那么如果这是一个正确的方向,那么接下来应该从下面的窗口中选择什么?在字段Data Source和 中输入什么Location,这意味着或多或少相同?

在此处输入图片说明

我按照此处描述的说明操作: 将访问数据库 (.accdb) 导入 SQL Server 2016 的最简单方法? 我已经安装Microsoft Access Database Engine 2010 Redistributable

然而我却无望地看到 Microsoft Office 12.0 Access Database Engine OLEDB

更新

如果我选择数据源,因为Microsoft Access (Microsoft Access Database Engine)我最终收到错误消息,如下图所示。此外,我认为这个数据源是为文件mdb而不是accdb量身定制的。 在此处输入图片说明

ms-access sql-server import

7
推荐指数
1
解决办法
2万
查看次数

SUM() 忽略 GROUP BY 并总结 4 行而不是 2

GROUP BY在 MySQL中遇到困难。

我的数据库设置:

client_visit
    - id
    - member_id
    - status_type_id (type_of_visit table)
    - visit_starts_at
    - visit_ends_at

member
    - id

schedule_event
    - id
    - member_id
    - starts_at
    - ends_at

type_of_visit
    - id
    - type (TYPE_BOOKED, TYPE_PRESENT etc)
Run Code Online (Sandbox Code Playgroud)

就这个问题而言:a在给定时间member教一门课或领导一项活动 (a schedule_event)。Aclient报名参加此课程或活动。

例如:

客户 A、B 和 C 预订访问,而那些访问client_visitschedule_event_id和组成的表member_id,因此我们知道哪个班级和哪个成员正在教授/或进行活动。

现在,我们想知道给定成员花费在客户注册的教学/领导活动上的总时间(基于client_visit type_of_visit相当于“预订”或“出席”的列)。我们将把成员 ID 82 作为我们的测试用例。

会员 ID 82 在两个不同的班级有 4 个客户,所以如果每个班级花费 2 小时 15 分钟(8100 秒),那么总时间应该是 16200 秒。

首先是我的查询: …

mysql group-by sum

6
推荐指数
2
解决办法
3万
查看次数

如何确保我始终连接到 MongoDB ReplicaSet 中的主/次节点?

我有一个运行在 3 个不同服务器上的 3 节点副本集。我已经完成了设置,一切都很好。现在我想给我的用户两个连接字符串:

  1. 连接到这个“xyz”进行写入

  2. 连接到此“abc”以获取只读流量

我还尝试为每个连接设置一个 CNAME,以便将来能够灵活地更改。

提前感谢并感谢您的时间。

mongodb

6
推荐指数
1
解决办法
2万
查看次数

SSMS 还原数据库向导响应缓慢

我最近刚刚在我监督的 SQL Server 2012 SP3 实例之一上注意到了这一点。

当我尝试使用 SSMS 2012 还原数据库(通过右键单击数据库,然后选择Tasks > Restore > Database)时,Restore Database 窗口(您可以在其中选择源数据库和目标数据库等)过了好久才终于出现在屏幕上。我有时在这里讲超过 10 分钟。

我在使用本地 SSMS 和安装在安装了 SQL Server 实例的 Windows Server 上的 SSMS 上都注意到了这一点。

我只在一个特定实例中注意到这一点。在其他实例的 gui 上执行还原时,我没有看到相同的响应缓慢问题。

你们有没有人见过这个?我很感激你的帮助。谢谢。

ssms restore

6
推荐指数
1
解决办法
5132
查看次数