数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答


5
数十亿行数据的最佳数据库和表设计
我正在编写一个需要存储和分析大量电气和温度数据的应用程序。 基本上,我需要存储过去几年以及成千上万个位置以后很多年的每小时小时用电量测量值,然后以一种不太复杂的方式分析数据。 我现在需要存储的信息是位置ID,时间戳(日期和时间),温度和用电量。 关于需要存储的数据量,这是一个近似值,但遵循以下原则: 20000多个位置,每月720条记录(每小时测量,每月大约720小时),120个月(十年前) )以及未来的很多年。简单计算得出以下结果: 20 000个位置x 720条记录x 120个月(10年前)= 1 728 000 000条记录。 这些是过去的记录,新记录将每月导入,因此大约每月20000 x 720 = 14400 000新记录。 总地点也将稳定增长。 对于所有这些数据,将需要执行以下操作: 检索某个日期和时间段内的数据:某个特定位置ID的所有记录,这些记录介于日期01.01.2013和01.01.2017之间以及07:00和13:00之间。 在特定日期和时间范围内进行简单的数学运算,例如,在07:00至13:00之间的5年中,某个位置ID的MIN,MAX和AVG的温度和用电量。 数据将每月写入一次,但会(至少)不断被数百个用户读取,因此读取速度显得尤为重要。 我没有使用NoSQL数据库的经验,但是从我的经验来看,它们是在此处使用的最佳解决方案。我已经阅读了最流行的NoSQL数据库,但是由于它们完全不同,并且还允许非常不同的表体系结构,因此我无法决定使用哪种最佳数据库。 我的主要选择是Cassandra和MongoDB,但由于我的知识非常有限,并且在涉及大数据和NoSQL方面没有实际经验,因此我不确定。我还阅读到PostreSQL也可以很好地处理此类数据。 我的问题如下: 我是否应该将NoSQL数据库用于如此大量的数据。如果不能,我可以坚持使用MySQL吗? 我应该使用哪个数据库? 我应该将日期和时间保留在单独的索引索引(如果可能)列中,以便在特定的时间和日期期限内快速检索和处理数据,还是可以通过将时间戳记保留在单个列中来完成此操作? 时间序列数据建模方法在这里是否合适,如果不合适,您能否为我提供良好表设计的指导? 谢谢。

2
在其他域中使用Windows身份验证连接到SQL Server
我正在尝试连接到另一个域中VPN上的远程SQL Server。当我在SQL Server上输入服务器名称并选择“其他连接参数”以添加学校需要的一些其他东西时: Integrated Security=SSPI; User ID=DOMAIN\username; Password=Password 我收到以下错误: 登录失败。该登录名来自不受信任的域,不能与Windows身份验证一起使用。

5
PostgreSQL中的索引工作
关于PostgreSQL中索引的工作,我有几个问题。我有一个Friends具有以下索引的表: Friends ( user_id1 ,user_id2) user_id1并且user_id2是user表的外键 这些等效吗?如果没有,那为什么呢? Index(user_id1,user_id2) and Index(user_id2,user_id1) 如果我创建主键(user_id1,user_id2),它会自动为其创建索引并 如果第一个问题中的索引不相等,则在上述主键命令上创建哪个索引?


1
合并目标表的子集
我正在尝试使用一条MERGE语句从表中插入或删除行,但是我只想对这些行的子集进行操作。的文档中MERGE有一个措辞非常强烈的警告: 重要的是仅指定目标表中用于匹配目的的列。即,指定目标表中与源表的相应列进行比较的列。不要尝试通过过滤掉ON子句中的目标表中的行来提高查询性能,例如通过指定AND NOT target_table.column_x = value。这样做可能会返回意外和错误的结果。 但这正是我要做的MERGE工作。 我拥有的数据是一个标准的项目对类别的多对多联接表(例如,哪些项目包括在哪些类别中),如下所示: CategoryId ItemId ========== ====== 1 1 1 2 1 3 2 1 2 3 3 5 3 6 4 5 我需要做的是用新的项目列表有效地替换特定类别中的所有行。我最初的尝试是这样的: MERGE INTO CategoryItem AS TARGET USING ( SELECT ItemId FROM SomeExternalDataSource WHERE CategoryId = 2 ) AS SOURCE ON SOURCE.ItemId = …

6
NoSQL和传统的RDBMS有什么区别?
NoSQL和传统的RDBMS有什么区别? 在过去的几个月中,NoSQL在技术新闻中经常被提及。与传统的RDBMS相比,它最重要的功能是什么?差异发生在什么级别(物理的,逻辑的)? 在哪里使用NoSQL的最佳位置?为什么?

8
如何在MySQL 5.5中轻松将utf8表转换为utf8mb4
我有一个数据库,现在需要支持4个字节的字符(中文)。幸运的是,我已经在生产MySQL 5.5。 所以我只想将所有utf8_bin的排序规则都转换为utf8mb4_bin。 我相信此更改不会导致性能损失/收益,只是会增加一点存储开销。
71 mysql 

4
如何在没有密码提示的情况下使用psql?
我写了一个脚本来REINDEX索引数据库。这是其中之一: echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE} psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;" if [[ ${?} -eq 0 ]]; then echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE} else echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE} …
70 postgresql  index  psql 

6
如果我们在sql-server中启用读取已提交的快照,会有什么风险?
我在这里已经读到,每行将存储一些额外的数据,因此我们可能会看到性能下降,但是还有哪些其他风险? 例如。这会影响数据库的恢复吗?我们还需要采取其他措施来利用这一优势吗? 我计划执行以下命令: ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON 我相信这将使我们更接近oracle,如果一个事务正在更新,其他事务仍可以读取旧数据。这个对吗? 我正在研究此问题,因为我厌倦了SQL Server 2005中的锁定问题。我希望这可以减少用户偶尔看到的死锁,有助于提高应用程序的整体性能,并鼓励我们的开发人员为每个事务执行多个操作而无需恐惧。


5
如何将json数组转换为postgres数组?
我有一列data,其中包含一个json大致像这样的文档: { "name": "foo", "tags": ["foo", "bar"] } 我想将嵌套tags数组转换为串联字符串(foo, bar)。array_to_string()从理论上讲,这很容易实现。但是,此功能不适用于json数组。所以我想知道如何将该json数组转换为Postgres array?

10
人们为什么建议不要在标识列中使用名称“ Id”?
我被教导不要在Id表的标识列中使用该名称,但是最近我还是一直在使用它,因为它简单,简短并且对数据的真实性具有很强的描述性。 我见过有人建议Id给表名加上前缀,但这似乎对编写SQL查询的人(或者如果您使用的是诸如Entity Framework的ORM,则是程序员)做更多的工作,尤其是在较长的表名上,例如CustomerProductId要么AgencyGroupAssignementId 我们雇用了一个第三方供应商来为我们创建一些产品,实际上Ident是为了避免使用,而将其所有标识列都命名为Id。最初,我以为他们这样做是因为它Id是一个关键字,但是当我查看它时,发现它Id不是SQL Server 2005中的关键字,这就是我们正在使用的关键字。 那么为什么人们建议不要在Id标识列中使用该名称? 编辑:为澄清起见,我不是在问要使用哪种命名约定,也不是要在参数中使用一种命名约定。我只想知道为什么建议不要将其Id用于标识列名称。 我是一个程序员,而不是dba,对我而言,数据库只是存储我的数据的地方。由于我通常构建小型应用程序,并且通常使用ORM进行数据访问,因此使用Identity字段的通用字段名称要容易得多。我想知道这样做会导致我错过什么,以及是否有确凿的理由让我不这样做。

2
一个大查询或多个小查询哪个更快?
我曾在不同的公司工作过,并且我注意到其中有些人更喜欢将视图与所有“亲戚”一起加入表格中。但是随后在应用程序上,我们只需要使用1列。 因此,仅进行简单选择,然后在系统代码上“联接”它们会更快吗? 该系统可以是php,java,asp,也可以是连接到数据库的任何语言。 所以问题是,从服务器端(php,java,asp,ruby,python ...)到数据库的运行速度更快,运行一个查询即可获得我们所需的一切,或者从服务器端运行到数据库并运行一个查询一次只能从一个表中获取列?

5
此键值数据库模式有名称吗?
我们处理来自客户的例行数据馈送,该客户只是将其数据库从一种看起来很熟悉的形式(每个实体一行,每个属性一列)重构为一个我不熟悉的形式(每个实体每个属性一行,): 之前:每个属性一列 ID Ht_cm wt_kg Age_yr ... 1 190 82 43 ... 2 170 60 22 ... 3 205 90 51 ... 之后:所有属性的一列 ID Metric Value 1 Ht_cm 190 1 Wt_kg 82 1 Age_yr 43 1 ... 2 Ht_cm 170 2 Wt_kg 60 2 Age_yr 22 2 ... 3 Ht_cm …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.