加密 – 存储大量用户加密数据的最佳方法是什么?

我即将开发一个主要存储用户加密数据的应用程序.由于AES密钥对每个数据进行加密,AES密钥本身使用每个授权用户的公共RSA密钥加密.

鉴于非加密数据的数量可以忽略不计(可能只有用户登录,某些日期和外键),我想知道“标准DBMS”,如PostgreSQL或MySQL是否是一个不错的选择.

实际上,这些DBMS经过优化,可以处理不同类型的数据(文本,整数,日期……),索引,流程演算,聚合等.

就我而言,我将存储的绝大多数数据都是大量的文本(或者可能是二进制数据).大部分必需的微积分将在解密后在客户端进行处理.

因此,我将无法解析我的数据.因此,即使我有一个庞大的数据库,它也不会被称为“大数据”.但是,我想知道MongoDb,MemSQL或其他什么不是更准确的选择.如果没有,那么最好的DBMS和使用它的最佳方式是什么?

换句话说,我认为每个DBMS都必须做出牺牲才能在最重要的功能上更有效率.我也认为上面详述的案例不是那么随便.所以我假设有很多我不需要的功能(或者我不能使用,例如FULLTEXT搜索).另一方面,我可能需要“标准DBMS”丢弃的功能.

最佳答案
根据经验:如果您的数据结构良好,众所周知(提前)并且每个条目的大小有限(没有大型BLOB),关系数据库真的很擅长存储它.即使您不使用高级索引功能.

管理空间,尤其是数据文件中的空白空间,是一个非常难以解决的问题.关系数据库已经处理了20多年了 – 而且值得利用它们.除此之外,关系数据库还可以为您提供长期性能调优的好处.它们运行高度优化的本机代码,因此您不必为糟糕的Java实现,糟糕的网络堆栈,过度使用memcpy,垃圾收集,粗锁定以及新产品(尤其是noSQL内容)所具有的所有其他病症而苦苦挣扎.

要存储加密数据,请使用BINARY数据类型. MSSQL,MySQL和Postgres都支持这些类型.您可能不希望直接对这些类型执行操作(尽管您可以根据需要进行二进制操作).还要注意,在数据库本身中实现加密/解密相对容易,因为所有上述支持加密库.您还将受益于键/外键列的索引,以便您可以快速找到数据.关系数据库是小值类型的优秀键/值存储 – 即使在一个小盒子上,SQL Server也可以轻松地为您提供超过1-10M的键/值查找/秒 – 我希望MySQL和PostGres能够在同一个球场中提供结果.

找到能够有效查询关系数据库的程序员也很容易. SQL已经存在了很长时间,它是一种非常强大的语言. MSSQL甚至可以为您提供自动并行执行.一些程序员不会“得到”它 – 但如果他们不这样做,他们很可能也不会理解并行性或lambda表达式(现代编码器的两个关键技能).

除了所有这些优点之外,您还可以为所有标准关系数据库获得强大的备份和监视工具.

所以基本上,除非你有一个非常好的理由使用NoSQL – 只需使用关系数据库.

转载注明原文:加密 – 存储大量用户加密数据的最佳方法是什么? - 代码日志