小编app*_*l3r的帖子

在单个表上使用多个唯一约束是否被认为是糟糕的设计?

我正在查看 PostgreSQL 的INSERT INTO .. ON CONFLICT (..) DO UPDATE ..语法并意识到,您不能使用它进行多个唯一约束检查​​。我的意思是,您要么通过列名引用复合唯一索引ON CONFLICT (Name, Symbol)(如果为这两列定义了唯一索引),要么使用主键。如果为列定义两个单独的唯一索引,则只能检查一个。

CREATE TABLE student
    (Id int primary key, Name varchar(50), Symbol varchar(50),
      CONSTRAINT col1_unique UNIQUE (Name),
      CONSTRAINT col2_unique UNIQUE (Symbol)
    ); 

INSERT INTO student
    (Id, Name, Symbol)
VALUES
    (1, 'John', 'J'),
    (2, 'David', 'D'),
    (3, 'Will', 'W');

INSERT INTO student
    (Id, Name, Symbol)
VALUES
    (4, 'Jeremy', 'J')
   on conflict(Name) DO UPDATE
   set Name = 'Jeremy';
Run Code Online (Sandbox Code Playgroud)

可能会抛出错误,说J是重复的。然而,这个例子只是一个糟糕的设计,因为符号应该在另一个表中,并通过一对多关系连接到学生表。这就是为什么我想知道,也许 PostgreSQLon conflict是这样设计的,因为您总是可以以某种方式重构表,其中只有一个唯一索引。 …

postgresql database-design merge

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

MongoDB GridFS 将文件大小增加了三倍

我真的很喜欢使用 mongodb 来存储我的数据,最近我尝试了 GridFS,它确实适合我的用例。

我的问题是空间要求,这看起来很奇怪。我在 Amazon S3 中有大约 107GB 的图像,大约有 100 万个文件(所有图像,大部分是小图像)。我制作了一个简单的 Java 项目,从 S3 下载图像并将它们插入到两个单独的 MongoDB GridFS 集合(单服务器、3.6.5、64 位、Windows Server 2016)中。问题是,当上传/下载完成时,GridFS 集合在服务器上占用超过 300GB 的存储空间。对于此类收藏来说,这是可以接受的还是我应该担心三倍的尺寸?

注意:我只是使用 Java Mongo 驱动程序(Spring Boot)插入图像,没有任何重大更改,问题出在图像块上。我不删除或更新任何图像(不过,我为 MD5 字段定义了唯一索引,以忽略图像重复),因此压缩和修复不会更改集合大小。据我所知,集合并没有过度预分配(我不认为我的问题与此类似:Huge size on mongodb's gridfs. Should I Compact?

此外,目前它是单个 mongodb 服务器,没有副本集。

非常感谢您的帮助!

mongodb files mongodb-3.6

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