在对我的一个问题发表评论之后,我在想是否更好地使用带有X架构的1个数据库,反之亦然.
我的情况:我正在开发一个网络应用程序,当人们注册时,我创建(实际上)数据库(不,它不是社交网络:每个人都必须能够访问自己的数据,永远不会看到其他用户的数据).
这就是我用于我的应用程序的先前版本(仍然在mysql上运行)的方式:通过plesk api,对于每次注册,我这样做:
现在,我需要对postgresql做同样的事情(项目越来越成熟,mysql ......不能满足所有需求)
我需要使所有数据库/模式备份独立:pg_dump在两种方式下都能很好地工作,对于可以配置为仅访问1个模式或1个数据库的用户来说是相同的.
所以,假设你是比我更有经验的potgres用户,你认为对我的情况最好的解决方案是什么,为什么?
使用$ x db而不是$ x schemas会有性能差异吗?什么解决方案将来会更好地维护(可靠性)?
编辑:我差点忘了:我所有的数据库/模式将始终具有相同的结构!
Edit2:对于备份问题(使用pg_dump),使用1 db和多个模式可能更好,一次性转储所有模式:恢复将非常简单地在dev机器中加载主转储然后转储和恢复所需的模式:还有1个额外的步骤,但是倾倒所有架构似乎更快,然后逐个转储它们.
ps:对不起,如果我在文本中忘记了一些'W'字符,我的键盘会受到该按钮的影响;)
那么,应用程序的结构和设计在过去的两年中发生了很大变化.我仍在使用这种one db with many schemas方法,但是,我的应用程序的每个版本都有1个数据库:
Db myapp_01
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Db myapp_02
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Run Code Online (Sandbox Code Playgroud)
对于备份,我定期转储每个数据库,然后在开发服务器上移动备份.
我也使用PITR/WAL备份,但正如我之前所说,它不太可能我必须立即恢复所有数据库 ..所以它可能会被解雇今年(在我的情况下不是最好的方法).
从现在开始,1-db-many-schema方法对我来说非常有效,即使应用程序结构完全改变了:
我差点忘了:我所有的数据库/模式将始终具有相同的结构!
...现在,每个模式都有自己的结构,可以改变对用户数据流的反应.
作为标题,我如何设置一个表的列,使其具有当前年份和月份的默认值,格式为"YYYYMM",如今的200905?
参考这个问题,我有一个类似但不一样的问题..
在我的路上,我将有一些文本文件,结构如下:
var_a: 'home'
var_b: 'car'
var_c: 15.5
Run Code Online (Sandbox Code Playgroud)
我需要python读取文件,然后创建一个名为var_a的变量,其值为'home',依此类推.
例:
#python stuff over here
getVarFromFile(filename) #this is the function that im looking for
print var_b
#output: car, as string
print var_c
#output 15.5, as number.
Run Code Online (Sandbox Code Playgroud)
这是否可能,我的意思是,即使保留var类型?
请注意,我对文本文件结构有完全的自由,如果我提议的那个不是最好的,我可以使用我喜欢的格式.
编辑:ConfigParser可以是一个解决方案,但我不喜欢它,因为在我的脚本中我将有时参考文件中的变量
config.get("set", "var_name")
Run Code Online (Sandbox Code Playgroud)
但我喜欢的是直接引用变量,就像我在python脚本中声明的那样......
有一种方法可以将文件导入为python字典吗?
哦,最后一点,请记住,我不确切知道文本文件中有多少变量.
编辑2:我对stephan的JSON解决方案非常感兴趣,因为通过这种方式,可以使用其他语言(PHP,然后通过AJAX JavaScript)简单地读取文本文件,但是在执行该解决方案时我失败了:
#for the example, i dont load the file but create a var with the supposed file content
file_content = "'var_a': 4, 'var_b': 'a string'"
mydict = dict(file_content)
#Error: ValueError: dictionary update …Run Code Online (Sandbox Code Playgroud) 我正试图从Komodo切换到Eclipse.
我无法弄清楚如何在eclipse中显示换行符 - 看起来它们与标签和其他空白字符一起显示.
有没有办法显示标签和其他空格字符,但没有显示换行符?
我想知道bindParam()(或bindValue())中的数据类型声明用于...
我的意思是,我认为如果我定义一个整数参数(PDO::PARAM_INT),必须将参数转换为整数,类似于
$delete->bindParam(1, $kill, PDO::PARAM_INT);
// should work like
$delete->bindParam(1, (int)$kill);
Run Code Online (Sandbox Code Playgroud)
或者如果参数不是声明的类型,至少抛出一个错误.但这种情况并非如此.
谷歌搜索,我发现在php.net档案:
大家好,
我目前正在研究PDO.正好在bindParam()函数上.第三个参数data_type似乎在这里强制值的类型?但是当我尝试:
Run Code Online (Sandbox Code Playgroud)$sql = "INSERT INTO produit (idproduit, nom, marque) VALUES (NULL, :nom, :marque)"; $stmt = $dbh->prepare($sql); $nom = 'Testarossa'; $marque = 'Ferrari' ; $stmt->BindValue(':marque',$marque) ; $stmt->BindParam(':nom',$nom,PDO::PARAM_INT) ; $stmt->execute(); $nom = '250 GTO' ; $stmt->execute(); ?>我希望在我的数据库中有PHP错误或整数.但在我的数据库中我有:
22 Testarossa Ferrari 23 250 GTO法拉利
这意味着如果我有第三个参数,它不会改变.或许我想念一些东西.有人能容忍我吗?或者只是有人告诉我在哪里可以找到有关它的信息.
问候,
Cyruss
这正是我的情况.我的想法出了什么问题?
通过"蜜罐",我的意思或多或少是这种做法:
#Register form
<style>
.hideme{
display:none;
visibility: hidden;
}
</style>
<form action="register.php">
Your email: <input type="text" name="u-email" />
Choose a password: <input type="text" name="passwd" />
<div class="hideme">
Please, leave this field blank: <input type="text" name="email" /> #the comment is for text-browser users
</div>
<input type="submit" value="Register" autocomplete=off />
</form>
//register.php
<?php
if($_POST['email'] != ''){
die("You spammer!");
}
//otherwise, do the form validation and go on.
?>
Run Code Online (Sandbox Code Playgroud)
更多信息在这里.
显然,真实字段是用随机哈希命名的,而蜜罐字段可以有不同的名称(电子邮件,用户,网站,主页等等),这是spambot通常填写的.
我喜欢这种技术,因为它不会导致用户被CAPTCHA烦恼.
你有没有人对这种技术有一些经验?有效吗?
简单快速的问题,我有这些表:
//table people
| pe_id | pe_name |
| 1 | Foo |
| 2 | Bar |
//orders table
| ord_id | pe_id | ord_title |
| 1 | 1 | First order |
| 2 | 2 | Order two |
| 3 | 2 | Third order |
//items table
| item_id | ord_id | pe_id | title |
| 1 | 1 | 1 | Apple |
| 2 | 1 | 1 | Pear | …Run Code Online (Sandbox Code Playgroud) 我试图在一个简单的盒子上实现内阴影效果,如: alt text http://gotinsane.com/test.jpg
绿色框是另一个框内的内容.
我的问题是,如果我给内容框任何类型的背景,外框盒阴影效果消失!
这里有一个我的问题的例子(有标记和css),我已经设置内容高度较小以证明问题 - 我真的不关心IE*,这只是一个测试.
任何的想法?
UPDATE
盒子里面的内容有点像幻灯片,这里是一个例子(原始问题).thirtydot的答案可以解决这个问题,但它迫使我做一点点破解,根据内容改变包装器背景:这里的例子(thirtydot trick).
这可以是一个解决方案,但我不喜欢它太多,仍然不明白为什么外框阴影得到内框背景(颜色,图像)
更新2
谈到另一个论坛上这个问题,我发现了另一种方式:基本上,而不是用box-shadow在包装,将作为一个面具,我使用box-shadow并border-radius直接对内容(.step元素)然而,"面具"效果正是我我试图完成,所以这不是解决方案.
我仍然不明白内部元素背景如何以及为什么干扰外部元素设计,或者为什么从外部元素掉落的阴影落在内部元素后面.这可能是一个css bug吗?
UPDATE3
有人在mozilla上打开了一个bug,得到了这个澄清"问题"的答案:
来自http://www.w3.org/TR/css3-background/#the-box-shadow:
在堆叠上下文和绘制顺序方面,元素的外部阴影直接绘制在该元素的背景下方,元素的内部阴影直接绘制在该元素的背景上方(在边框和边框图像下方,如果有的话).
特别是,元素的子元素的背景将绘制在嵌入阴影之上(实际上它们在元素本身的边框和背景之上绘制).
因此渲染正是规范所要求的.
UPDATE4
Fabio A. 用css3pointer-events指出了另一个解决方案.看起来不错,也适用于IE8;)
这里的每个人都应该知道'或'状态,通常粘在die()命令上:
$foo = bar() or die('Error: bar function return false.');
Run Code Online (Sandbox Code Playgroud)
大多数时候我们看到类似的东西:
mysql_query('SELECT ...') or die('Error in during the query');
Run Code Online (Sandbox Code Playgroud)
但是,我无法理解'或'语句究竟是如何工作的.
我想抛出一个新的异常而不是die(),但是:
try{
$foo = bar() or throw new Exception('We have a problem here');
Run Code Online (Sandbox Code Playgroud)
不起作用,也不起作用
$foo = bar() or function(){ throw new Exception('We have a problem here'); }
Run Code Online (Sandbox Code Playgroud)
我发现这样做的唯一方法是这个可怕的想法:
function ThrowMe($mess, $code){
throw new Exception($mess, $code);
}
try{
$foo = bar() or ThrowMe('We have a problem in here', 666);
}catch(Exception $e){
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
但是有一种方法可以在'或'语句之后直接抛出新的异常吗?
或者这种结构是强制性的(我完全不依赖于ThrowMe功能):
try{
$foo = bar();
if(!$foo){ …Run Code Online (Sandbox Code Playgroud) 阅读这个问题我刚刚学会了blackhole表技巧的存在:基本上是使用单个表来插入数据,然后是在许多其他表中分割数据的触发器.
一旦开发项目的开发人员意识到这一点,我想知道这是否会导致问题.
这个tecnique的优点和缺点是什么?
编辑:当我看到这个例子时,我想到的眨眼是关于交易:如果由于某种原因交易失败,你会找到blackhole包含原始数据的行,用于历史目的,也许可以帮助调试 - 但这似乎成为我能看到的唯一+1黑洞.想法?