问题标签 [design-consideration]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache - 使用唯一属性作为构面属性的构面搜索指南
关于使用索引项的唯一属性作为配置的方面属性之一,方面搜索设计指南有什么说法?
我正在寻找一些有据可查的证据。
在我看来,这没有意义。唯一属性的方面是按 id 搜索的不好的解决方法。这将使分面面板无法使用长时间令人沮丧的滚动以超越唯一 id 列表以移动到其他相关属性。
database - 是否有理由不将加密数据作为二进制存储在数据库中?
我必须将 AES-GCM 加密数据存储在数据库中。目前我们使用 MariaDB,但可以选择稍后更改为 PostgreSQL。(但也应考虑其他数据库)
既然算法实际上并不加密字符串,而是字节,加密算法的输出也是一个字节[],为什么不将加密后的数据直接存储在二进制列中呢?
对于 MariaDB/MySql 这将是一个BLOB
. 我知道 PostgreSQL 甚至有一个用于加密数据的首选特殊数据类型,称为bytea
.
然而,大多数程序员似乎将加密字节编码为 Base64,并将生成的字符串存储在VARCHAR
.
Base64 的编码和解码对我来说似乎违反直觉。它使数据最多延长 50%,并且每次都是一个额外的步骤。它还强制数据库在存储和检索数据时应用字符编码。这是一个额外的步骤,肯定会花费额外的时间和资源,而我们真正需要存储的只是一些字节。加密数据在任何字符编码中都毫无意义。
问题:
是否有充分的理由支持或反对将加密数据作为二进制存储在数据库中?是否存在安全性、数据完整性或性能方面的原因,我可能不想将加密数据直接存储为二进制文件?