标签: hashing

Microsoft 是否发布其 SQL 查询哈希算法..?

我们在我们的环境中使用 SQL Spotlight。它很方便。我们特别使用 sys.dm_exec_requests 和 sys.dm_exec_query_stats 的输出。

Spotlight 使用很好的散列从计划缓存中为您提取查询计划。

问题是,除非您对代码库有经验,否则很难知道该查询来自何处。

我有一个想法,如果我可以:

  • 解析代码库
  • 拉取 SQL 查询
  • 以与微软相同的方式散列它们

通过这种方式,我可以快速匹配哈希值,以便能够查看特定查询来自代码库的何处。

或者我必须做一些非常慢的正则表达式......

sql-server hashing

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

无法在 RDS 上的 PosrgreSQL 9.3 上运行digest()

按照另一个答案给出的建议,我尝试digest()在 AWS RDS 上的 PostgreSQL 9.3 上使用该函数:

devdb=> SELECT digest('blah', 'sha1');
ERROR:  function digest(unknown, unknown) does not exist
LINE 1: SELECT digest('blah', 'sha1');
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

即使存在 pgcrypto:

devdb=> SHOW rds.extensions;
Run Code Online (Sandbox Code Playgroud)

btree_gin,btree_gist,chkpass,citext,cube,dblink,dict_int,dict_xsyn,earthdistance,fuzzystrmatch,hstore,intagg,intarray,isn,ltree,pgcrypto,pgrowlocks,pg_trgm,plperl,plpgsql,pltcl,posttiger,postggis_ tablefunc,tsearch2,unaccent,uuid-ossp

如何启用该digest()功能?

更新

在AWS RDS论坛上共同提问,会发帖互相更新。

digest() 数据库上似乎不存在:

devdb=> \df digest
                       List of functions
 Schema | Name | Result data type | Argument …
Run Code Online (Sandbox Code Playgroud)

postgresql-9.3 hashing

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

SQL Server 与 Oracle 中多字节字符的字节排序

我目前正在将数据从 Oracle 迁移到 SQL Server,但在尝试验证迁移后的数据时遇到了问题。

环境详情:

  • Oracle 12 - AL32UTF8 字符集
  • 客户端 - NLS_LANG - WE8MSWIN1252
  • VARCHAR2 字段

SQL Server 2016

  • Latin1_General_CI_AS 整理
  • NVARCHAR 字段

我在 Oracle 上使用 DBMS_CRYPTO.HASH 生成整行的校验和,然后复制到 SQL 并使用 HASHBYTES 生成整行的校验和,然后我将其进行比较以验证数据匹配。

除具有多字节字符的行外,所有行的校验和都匹配。

例如,具有以下字符的行: ? 校验和不匹配,即使数据传输正确。当我在 Oracle 中使用 DUMP 或在 SQL Server 中转换为 VARBINARY 时,除此字符的字节外,数据完全匹配。

在 SQL Server 中,字节为 0xE625,在 Oracle 中为 0x25E6。

为什么它们的顺序不同,是否有可靠的方法将一个转换为另一个以确保另一端的校验和与具有多字节字符的字符串匹配?

oracle sql-server encoding hashing unicode

5
推荐指数
1
解决办法
1267
查看次数

确定散列 varchar 列的大小

我正在使用 SQL Server。

我有这张桌子:

create table MyTable (
ID int not null ,
Name varchar(500) )
Run Code Online (Sandbox Code Playgroud)

我正在添加一name_hash列来存储该name列的哈希值:

alter myTable
    add 
    name_hash AS HASHBYTES('SHA1', CONVERT(VARCHAR(90), Name))
Run Code Online (Sandbox Code Playgroud)

如何确定 的结果大小name_hash?它与我想要应用散列的列的大小有关吗?

sql-server hashing

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

Postgres 中的高效键值存储

我想使用 Postgres(CloudSQL 中的 11)作为高效的键值存储。我有大约 200GB 的字典(平均大小为 10kB,结构可以不同并且可以嵌套)。我正在考虑利用改进的哈希索引。这是架构:

\n\n
        CREATE EXTENSION IF NOT EXISTS "uuid-ossp";\n\n        CREATE TABLE IF NOT EXISTS key_val (\n            id uuid DEFAULT uuid_generate_v4(),\n            value jsonb,\n            EXCLUDE using hash (id with =)\n        );\n\n        CREATE INDEX IF NOT EXISTS idx_key_val ON key_val USING hash (id);\n
Run Code Online (Sandbox Code Playgroud)\n\n

获取、更新和插入非常简单,但我不知道如何实现高效的更新插入。

\n\n
INSERT INTO key_val VALUES ($1, $2) ON CONFLICT ON CONSTRAINT key_val_id_excl DO UPDATE SET value = ($2)\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果是WrongObjectTypeError ON CONFLICT DO UPDATE not supported with exclusion constraints

\n\n

可能的解决方案:

\n\n …

postgresql upsert json hashing google-cloud-sql

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

SQL Server 哈希字节种子

我正在尝试将 SQL Server 生成的HASHBYTES()哈希值与 python hash()(或hashlib) 函数生成的哈希值进行比较。对于这两个函数,使用相同的算法。问题是我不知道 SQL 的种子,所以我无法使用 python 生成相同的输出。有没有办法设置SQL的种子?我无法找到任何与之相关的信息。

sql-server python hashing

4
推荐指数
2
解决办法
212
查看次数

Hash Join 如何与除等式运算符以外的关系运算符一起使用?

我一直在阅读有关 Hash Join 以及它在物理层面上是如何工作的。但是,有些事情我不明白(因为我缺乏知识)。

这是我找到的Hash Join算法;

for each row R1 in the build table
    begin
        calculate hash value on R1 join key(s)
        insert R1 into the appropriate hash bucket
    end
for each row R2 in the probe table
    begin
        calculate hash value on R2 join key(s)
        for each row R1 in the corresponding hash bucket
            if R1 joins with R2
                return (R1, R2)
    end
Run Code Online (Sandbox Code Playgroud)

这对于诸如"TABLE1.NAME == TABLE2.NAME"等的连接条件似乎是足够的。但是,当连接条件为"TABLE1.NAME == TABLE2.NAME" && "TABLE1.AGE > TABLE2.AGE".

我只是无法找到并理解他们如何生成或比较需要相等运算符和其他一些关系运算符(例如大于等)的哈希值。

join physical-design hashing

3
推荐指数
1
解决办法
157
查看次数

我应该在 SQL Server 中使用已弃用的 MD5 函数吗?

我们想对我们的散列函数使用 MD5 而不是 SHA_256,但从 SQL Server 2016 开始,不推荐使用 MD5。我们将其用于散列(比较哪些记录已更改)。我们现在面临着使用这个函数冒着风险或使用 SHA_256 产生存储和性能开销的困境。令人沮丧的是,Microsoft 决定弃用这些功能,即使它们在某些情况下仍然有用。

该项目不是业务的关键组成部分。我们可能会选择 SHA_256,但这是正确的选择吗?新开发应该总是避免弃用的功能吗?

对于上下文 - 每天将有大约 1-2 百万个更新插入到一个 4 亿行表中,动态比较哈希字节。大约 30 列宽

https://docs.microsoft.com/en-us/sql/t-sql/functions/hashbytes-transact-sql?view=sql-server-2017

在 HashBytes 函数中选择正确的算法

sql-server hashing sql-server-2017

3
推荐指数
1
解决办法
1549
查看次数

SHA3​​-256 哈希的索引、数据类型配置和 DBMS 的定义

我正在设计一个系统,在该系统中我需要能够使用文件或字符串 SHA3-256 哈希来搜索数据库。

例如,测试的哈希是

36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80
Run Code Online (Sandbox Code Playgroud)
  1. 我应该设置哪个DATATYPE来存储这个值?我听说过使用 BINARY 而不是 VARCHAR。
  2. 我应该如何索引此列,以便按哈希搜索最快?
  3. 我应该使用哪种数据库管理系统(如 PostgreSQL、DB2、SQL Server)或文档软件(如 MongoDB)最有效地允许我通过哈希存储和检索记录?我只有像 MySQL 这样的关系数据库管理系统的经验,但也许像 MongoDB 这样的文档存储会是更好的方法。

index database-design datatypes hashing

3
推荐指数
1
解决办法
136
查看次数

如何取回传递给 HASHBYTES() 的值?

我想使用 SQL ServerHASHBYTES()功能。

但我不知道如何取回传递给HASHBYTES...的值

sql-server t-sql hashing

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

SQL Server 查询计划哈希冲突

我想知道是否有人可以阐明我的担忧,即query_plan_hash碰撞可能导致查询作为完全不同的查询执行。

散列是一个 16 位的十六进制,sp_help sys.dm_exec_query_stats表示是一个二进制。因此它只是一个 64 位的散列,并且碰撞似乎很有可能(考虑到 SHA1 [160 位] 刚刚被验证有碰撞)。

请问plan_hashquery_plan_hash都有碰撞的这个(查询作为一个完全不同的查询被执行)的情况发生?

我也很好奇 SQL Server 中是否有设置允许我们将此哈希更改为 SHA2-512(以减少发生冲突的可能性)。我们的数据非常重要。

我通过 Google 和 Stack Exchange 论坛进行了高低搜索。

sql-server execution-plan database-internals hashing

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

多线程/并行插入和哈希分区中的 SQL Server 锁存

我们正在 SQL 服务器表中进行并行、多线程插入,并希望减少闩锁。

利用散列分区来减少闩锁的缺点是什么?从本质上查询所有这些拆分的分区表是否降低了查询速度?

我们有大约 120 表插入每秒,金融系统。

其他注意事项:SQL 2016 系统每年将使用大约 50 GB 的 SSD 硬盘空间。目前,拥有 50 个核心处理器和 150 GB 的 RAM。

平台未搭建,所以没有基线测试;但我需要制定测试计划和策略。

哈希分区示例: http : //www.madeiradata.com/how-to-solve-the-tail-insert-problem-2/

CREATE PARTITION FUNCTION pf_hash (TINYINT) 
AS RANGE LEFT FOR VALUES (0,1,2,3,4,5,6,7,8);

CREATE PARTITION SCHEME ps_hash 
AS PARTITION pf_hash ALL TO ([PRIMARY]);

CREATE TABLE dbo.UserEntries_RegularWithHash 
(   
Id BIGINT IDENTITY NOT NULL,
UserId INT NOT NULL ,
CreatedDate DATETIME2 NOT NULL,
HashId AS CAST(Id % 9 AS TINYINT) PERSISTED NOT NULL,
CONSTRAINT PK_UserEntries_RegularWithHash 
PRIMARY KEY CLUSTERED …
Run Code Online (Sandbox Code Playgroud)

database-design sql-server concurrency partitioning hashing

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