我正在INSERT ... ON DUPLICATE KEY UPDATE
为PRIMARY KEY
下表中的a 做一个:
DESCRIBE users_interests;
Run Code Online (Sandbox Code Playgroud)
+------------+---------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------------------+------+-----+---------+-------+
| uid | int(11) | NO | PRI | NULL | |
| iid | int(11) | NO | PRI | NULL | |
| preference | enum('like','dislike','ignore') | YES | | NULL | |
+------------+---------------------------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
但是,即使这些值应该是唯一的,我也会看到2行受到影响.
INSERT INTO users_interests (uid, iid, preference) VALUES (2, 2, 'like')
ON DUPLICATE KEY UPDATE …
Run Code Online (Sandbox Code Playgroud) 让我从蝙蝠开始,说我知道这不是最好的解决方案.我知道这是一个kludgy和一个功能的黑客.但那就是我在这里的原因!
这个问题/工作建立了与 Facebook的新闻提要的创建者安德鲁博斯沃思讨论Quora.
我正在构建各种新闻源.它完全是在PHP
和MySQL
.
Feed的关系模型由两个表组成.一个表用作活动日志; 事实上,它的名字activity_log
.另一张桌子是newsfeed
.这些表几乎相同.
日志的架构是activity_log(uid INT(11), activity ENUM, activity_id INT(11), title TEXT, date TIMESTAMP)
...并且Feed的架构是newsfeed(uid INT(11), poster_uid INT(11), activity ENUM, activity_id INT(11), title TEXT, date TIMESTAMP)
.
每当用户执行与新闻源相关的操作时,例如询问问题,它将立即记录到活动日志中.
然后每隔X分钟(此刻5分钟,将改为15-30分钟后),我运行一个执行下面脚本的cron作业.此脚本循环遍历数据库中的所有用户,查找该用户的所有朋友的所有活动,然后将这些活动写入新闻源.
目前SQL
,剔除活动(被称为ActivityLog::getUsersActivity()
)有一个LIMIT 100
强加性能*的原因.*不是我知道我在说什么.
<?php
$user = …
Run Code Online (Sandbox Code Playgroud) 我正在使用Node.js
felixge的node-mysql
客户端.我没有使用ORM.
我正在测试Vows并希望能够模拟我的数据库,可能使用Sinon.由于我本身并没有真正的DAL(除了node-mysql
),我不确定如何解决这个问题.我的模型大多是简单的CRUD,有很多吸气剂.
有关如何实现这一目标的任何想法?
我正在从MySQL切换到MongoDB.对于一个非常基本的users
表,我熟悉的架构将自动递增uid
.有关此用例,请参阅Mongo自己的文档.
我想知道这是否是最好的建筑决策.从UX的角度来看,我喜欢将UID作为外部引用,例如在较短的URL中:http://example.com/users/12345
还有第三种方式吗?IRC Freenode的某人#mongodb
建议创建一系列ID并缓存它们.我不确定如何实际实现它,或者是否还有其他路线我可以去.我甚_id
至不需要以这种方式增加自身.只要文档中users
都有唯一的数字uid
,我会很高兴.
我一直在为PHP项目开发一个实现大多数自动化连续部署周期的工作流程.我想对此工作流程中可能的流程或技术瓶颈,改进建议以及如何更好地自动化和增加团队易用性的想法提供一些反馈.
Hudson
CI服务器Git
和 GitHub
PHPUnit
单元测试Selenium RC
Sauce OnDemand
用于自动化,跨浏览器,云测试 Selenium RC
Puppet
用于自动化测试服务器部署Gerrit
用于Git代码审查Gerrit Trigger
对于 Hudson
编辑:我已经改变了工作流程图形采取ircmaxwell的贡献考虑在内:删除PHPUnit
的扩展Selenium RC
和运行这些测试仅作为QC阶段的一部分; 增加QC阶段; 在代码审查之后但在合并之前移动UI测试; 在QC阶段之后移动合并; 合并后移动部署.
此工作流程图描述了该过程.我的问题/想法/关注如下.
使用该系统的总体困难.
时间参与.
难以招聘Gerrit
.
难以招聘Puppet
.
我们稍后将在Amazon EC2
实例上进行部署.如果我们要了解如何设置Debian
与包Puppet
和部署到Linode
现在片,有没有对工作部署的潜力Linode
来打破EC2
?我们应该从一开始就进行构建和部署EC2
吗?
另一个问题:EC2
和Puppet
.我们也在考虑使用Scalr作为解决方案.是否有必要避免Puppet
单独开销并投资Scalr?我这里有关于成本的次要问题(ha!); 该Selenium
试验不应该运行的是往往是EC2
建立实例运行24/7,但对于像五分钟的身材,对于一个小时支付 …
PHPUnit
自己的手册有一些尚未写的部分,名为"操作"和"数据库测试最佳实践".
用于测试数据库的最佳实践是什么PHPUnit
,特别是在MySQL
?
我喜欢Node.js中Jade模板引擎的类似HAML的语法,我很乐意在Backbone.js中使用它的客户端.
我通常使用以下样式的Underscore.js模板看到Backbone.
/* Tunes.js */
window.AlbumView = Backbone.View.extend({
initialize: function() {
this.template = _.template($('#album-template').html());
},
// ...
});
/* Index.html */
<script type="text/template" id="album-template">
<span class="album-title"><%= title %></span>
<span class="artist-name"><%= artist %></span>
<ol class="tracks">
<% _.each(tracks, function(track) { %>
<li><%= track.title %></li>
<% }); %>
</ol>
</script>
Run Code Online (Sandbox Code Playgroud)
我想看到的是一种使用AJAX(或其他方法)获取Jade模板并在当前HTML中呈现它们的方法.
我觉得我必须.children()
在一些jQuery函数中使用太多.
这是我的HTML:
<div class="goal-small-container">
<div class="goal-content">
<div class="goal-row">
<span class="goal-actions">
Run Code Online (Sandbox Code Playgroud)
这是我的jQuery:
$('.goal-small-container').hover(function() {
$(this).children('.goal-content').children('.goal-row').children('.goal-actions').css({visibility: "visible"});
}, function () {
$(this).children('.goal-content').children('.goal-row').children('.goal-actions').css({visibility: "hidden"});
});
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?如何减少我在jQuery函数中使用的子项数量?
我刚开始一起使用GitHub,Gerrit和Hudson(Jenkins).我需要一些关于工作流程的想法.
我们想使用GitHub作为我们的主要远程仓库.我们想将Gerrit主要用于代码审查,还要用于Hudson中的构建触发器.
但是,目前我在思考这个工作流程时遇到了一些麻烦,并希望听到其他人自己做了什么.思考?
还有一个类似的问题,但它似乎没有回答我的问题.
我的问题是:为什么我ERROR 1222 (21000): The used SELECT statements have a different number of columns
从以下SQL中收回此错误
SELECT * FROM friends
LEFT JOIN users AS u1 ON users.uid = friends.fid1
LEFT JOIN users AS u2 ON users.uid = friends.fid2
WHERE (friends.fid1 = 1) AND (friends.fid2 > 1)
UNION SELECT fid2 FROM friends
WHERE (friends.fid2 = 1) AND (friends.fid1 < 1)
ORDER BY RAND()
LIMIT 6;
Run Code Online (Sandbox Code Playgroud)
这是users
:
+------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default …
Run Code Online (Sandbox Code Playgroud)