小编Ran*_*ash的帖子

Postgres 9.1 vs Mysql 5.6 InnoDB?

简单的问题 - 在2012年需要与ACID兼容的中型/大型数据库会更好.

我已经阅读了关于mySQL vs pgSQL的所有内容(大多数内容),但大多数内容分别与版本4,5.1和7,8有关并且过时(2008,2009).它几乎是2012年,所以我想我们可以尝试重新审视这个问题.

基本上我想知道PostgreSQL中是否有任何东西超出了MySQL的易用性,可用性和更大的开发人员/知识库.

MySQL的查询优化器仍然是愚蠢的吗?在非常复杂的查询上它仍然超级慢吗?

打我!:)

PS.不要把我送到护目镜或维基.我正在寻找一些不是概述的具体要点+我相信StackOverflow比一些随机页面更能让'聪明的家伙'发光.

附录

项目规模:假设一个订单系统,每个帐户大约10-100个订单/天,几千个帐户,最终,每个可以有几百到几千个用户.

擅长:在需求不断增长和变化时具有前瞻性和灵活性.在硬件部门保持低成本方面,性能也很重要.此外,熟练劳动力的可用性也是一个因素.

OLTP或OLAP:OLTP

mysql postgresql

69
推荐指数
3
解决办法
3万
查看次数

PHP foreach只返回键

理论上的问题可能没有任何意义但仍然存在,也许有一个聪明的答案.

我想迭代数组并获取它的键和它们的东西.我做的一个简单例子:

foreach($array as $key => $value) {
    $other_array[$key] = 'something';
}
Run Code Online (Sandbox Code Playgroud)

现在,在此范围内未使用的PHP Mess Detector尖叫声$value.因此,我在想,也许这不是访问keys我的最佳方式array.

知道如何做到这一点,没有不必要地取出values我的array?它是否有任何重大的性能影响...或者我可能只是偏执狂,应该继续下去而不浪费任何人的时间与愚蠢的问题:).

php arrays foreach

36
推荐指数
3
解决办法
2万
查看次数

自然键vs代理键是一个innodb外键

一个问题:

我有2张桌子:

Product
id INT
name VARCHAR(64)
something TEXT
else INT
entirely BOOL
Run Code Online (Sandbox Code Playgroud)

Ingredient
id INT
name VARCHAR(64)
description TEXT
Run Code Online (Sandbox Code Playgroud)

现在我还有一个链接表

Products_Ingredients
product_id INT
ingredient_id INT
Run Code Online (Sandbox Code Playgroud)

为了我的多对多关系.

现在,产品和配料都有独特的名称.所以我可以使用名称作为自然键...但这是一个好主意吗?

说我有一个产品:Paint Thinner Supreme 含有成分:Butylonitrotetrocycline

将这些名称用作链接表中的复合键是否是一个好主意?

尽管我理解在代理人之上使用自然键背后的想法,我有点不能不再认为使用简单整数作为主键(和外键)会更快.MySQL服务器消化这些不同密钥的方式会有区别吗?

你有什么意见?

mysql database database-design foreign-keys relational-database

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

varchar(128)是否优于varchar(100)

快问.如果我将使用十进制字段限制或十六进制(例如16,32,64而不是10,20,50),从存储数据的角度来看是否重要?

我问,因为我想知道这是否与HDD上的集群有关?

谢谢!

sql database-design

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

MYSQL中的ORDER BY和=(等于)

我有一个问题,我遇到了一段有趣的代码.在MySQL语句中有类似的东西:

{...} ORDER BY whatever = 3 ASC,无论= 4 ASC,无论= 6 ASC {...}

这是否意味着它将以这种方式订购?:

thing | whatever  
15    | 1
1     | 3
5     | 3
8     | 3
2     | 4
3     | 4
6     | 4 
4     | 6
7     | 6
9     | 6
14    | 9
21    | 10
18    | 9 
...
Run Code Online (Sandbox Code Playgroud)

它似乎只是排序等于3,4和6休息是无序的...

这是正确/支持的语法吗?

mysql sql sql-order-by

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

Postgres 9超慢速简单删除

我有一个实质性的数据库...不是一个非常大的数据库 - 总共约1GB的数据.

我需要从几个表中删除一些行.例如,我有一张桌子

 Order
 id     | ... | status   | ...
 1      | ... | 1        | ...
 ...
 40     | ... | 20       | ...
 41     | ... | 1        | ...
 ...
 470000 | ... | 12       | ...
Run Code Online (Sandbox Code Playgroud)

现在我要删除所有的订单 status=1

我认为我这样做:

DELETE FROM Order WHERE status = 1

看起来很简单,但需要很长时间!当我运行此查询时,它仍然在40分钟后以100%的CPU使用率运行...当我杀死进程时没有删除任何内容.

当我尝试使用时限制范围

DELETE FROM Order WHERE status = 1 AND id <1000

删除约200行需要几分钟....

我的配置中是否有任何遗漏?我应该寻找/检查/改变什么?任何想法都是为什么它如此血腥低效?

让我补充一点,我通常使用MySQL并且需要管理这个postgres数据库但是对postgres没有任何经验,所以它可能非常简单.

索引同时包含id和status列.

表有大约500k行,大约一半需要删除.

执行计划:

Delete  (cost=0.00..19474.19 rows=266518 width=6)
->  Seq Scan on Orders  (cost=0.00..19474.19 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql database-administration

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

具有附加级别的 RBAC

我正在尝试设计一个RBAC带有扭曲的数据库(或者也许只有我认为它是扭曲的?)。据我所知,RBAC使用角色和权限来授予/拒绝对系统中某些对象的访问。当我只有一个站点实例并且只需创建一个角色 ' Main admin'、' Secondary admin'、' User' 等时,一切都变得美好而清晰。

但是,如果我在系统中有帐户怎么办?所以我有一个系统,其中有“ London”、“ Tokyo”和“ Moscow”帐户。现在我将为每个帐户设置“主管理员”,以及每个帐户中的许多“用户”——当然,莫斯科人应该无法登录伦敦帐户。我该怎么做?我是否创建了一些额外的表,将分配到用户的帐户绑定?或者我是否将 accountid 添加到分配表?或者也许我应该创建多个角色,如“moscow_main_admin”、“london_main_admin”等。这种情况的最佳方法是什么?

另外我相信我会有一些用户是伦敦帐户的“主管理员”和东京帐户的“次要管理员”。

我计划将 Yii 与它内置的 RBAC 一起使用......如果这有什么不同的话。

如何解决?

先感谢您!

database design-patterns rbac yii

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

PDF 转 JPG 影像页面选择

关于如何为命令行执行此操作的大量答案

convert /path/to/file/file.pdf[3] output.jpg
Run Code Online (Sandbox Code Playgroud)

很好...但是如果我在内存处理中使用,我会用 PDFlib 生成 PDF,然后将其缓冲区输出到我想要生成所选页面的 jpg 预览的函数。如何?我的代码:

    [...]
    $buf = $pdf->get_buffer();

    //$buff is just a PDF stored in a string now.

    $im = new Imagick();
    $im->readimageblob($buf);

    $im->setImageFormat("jpg");
    $im->setimagecompressionquality(60);

    $len = strlen($im);
    header("Content-type: image/jpeg");
    header("Content-Length: $len");      
    header("Content-Disposition: inline; filename=test.jpg");

    echo $im;
Run Code Online (Sandbox Code Playgroud)

这将创建一个 jpeg,但始终返回 PDF 的最后一页。我希望能够选择要转换哪一个。不保存临时文件和使用命令行(exec('convert /path/to/file/file.pdf[3] output.jpg'))语法是否可行?

让我补充一下,我试过

    $im->readimageblob($buf[2]);
Run Code Online (Sandbox Code Playgroud)

它没有用:)

php pdf imagemagick image-processing imagick

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

存储订单地址的最佳策略

我有一个“战略”问题。

事情是,我们有一张客户地址和客户订单的表格。结构类似于(只是一个例子,忽略归档类型等):

Address
id INT
line1 TEXT
line2 TEXT
state TEXT
zip TEXT
countryid INT
Run Code Online (Sandbox Code Playgroud)

为了保持数据的历史有效性,我们将这些地址与订单一起存储在文本字段中(以前它是通过引用完成的,但这是错误的,因为如果地址更改,所有旧订单也会更改交货地址,这是错误的)。例如:

Orders
id INT
productid INT
quantity INT
delivery_address TEXT
Run Code Online (Sandbox Code Playgroud)

delivery address 类似于 CONCAT_WS("\n",line1,line2,state,zip,country_name)

一切都很好,很花哨,但是似乎客户需要访问历史数据并能够以 XML 格式导出这些数据,他们希望再次正确拆分这些行。因为有时没有 line2 或 state 或 zip 或其他什么,我们如何以一种方式存储这些信息,然后我们可以破译每行的“标签”?

建议存储为 JSON 编码的数组,但这是最好的方法吗?我想将它存储为 XML ……或者创建那些 6-10 个额外的列并为每个订单存储地址数据?也许你们中的一些人在处理这种事情方面有更多的经验,并且能够为我指明正确的方向。

提前致谢!

mysql sql rdbms database-design

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

代理关键'偏好'解释

据我所知,自然键的纯粹主义者和代理键的纯粹主义者之间正在发生战争.喜欢这个帖子(有更多)人们说'自然键对你不好,总是使用代理...

但是,无论是我是愚蠢还是盲目,但我总是看不到有代理钥匙的理由!

假设您在配置中有3个表,如下所示: 链接表

为什么我需要一个代理键?我的意思是没有它是完全合理的.

此外,有人可以解释为什么主键不应该根据代理键纯粹主义者改变?我的意思是,如果我说color_id VARCHAR(30)了一把钥匙black,并且我不再需要黑色,因为我正在改变它charcoal,为什么改变blackcharcoal和所有引用列也是一个坏主意?

编辑:刚刚注意到我甚至不需要改变它!只需创建一个新的,更改引用列(与我将使用代理键相同)并保持旧的安全....

在代理关键口头禅我需要创建额外的条目,比如id=232name=black.这对我有什么好处?我在表中有一个备用钥匙,我不再需要了.另外我需要加入才能得到一个颜色名称,否则我可以留在一张桌子上并且快乐吗?

请向5岁的人解释一下,请记住,我并不是说"代理关键是不好的",我试图理解为什么会有人说'总是使用代理键!'.

sql database-design surrogate-key natural-key

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