我看到它的方式,在使用过滤器构建动态图表时,每次用户请求过滤后的数据我都可以
执行新的MySQL查询,并使用MySQL进行过滤。
SELECT date,
SUM(IF( `column` = `condition`, 1, 0)) as count
...
执行新的MySQL查询,并使用服务器端语言(在我的情况下为PHP)进行过滤。
function getData(condition) {
$resultSet = mysqli_query($link, "SELECT date, column ... ");
$count = 0;
while ($row = mysqli_fetch_assoc($result_set)) {
if ($row['column'] == 'condition') {
$count++;
}
}
}
最初执行单个MySQL查询,将所有数据传递给客户端,并使用Javascript& d3进行过滤。
我希望答案不是黑白的。例如,如果几乎没有请求某个过滤器,则让其他95%的用户等待相关数据可能没有意义,因此过滤器将需要新的数据调用。但我真的在考虑边缘情况 - 过滤器经常使用的情况,但是特殊情况。在这种情况下,将过滤逻辑放在前端,后端或数据库查询中是否更好?
答案 0 :(得分:5)
通常,如果过滤可以在前端完成,那么<em>应该在那里完成。优点是:
缺点是它可能比后端更慢,更复杂。但是,依赖于数据量,有很多情况(比如你的例子)Javascript足够好。 d3甚至还有一个内置的过滤功能:
//remove anything that isn't cake
d3.selectAll('whatever')
.filter(function(d){return d.type != 'cake'})
.remove()
如果您需要更复杂的过滤,例如基本聚合,您可以使用Crossfilter(也来自Mike Bostock)或优秀的d3 + crossfilter包装器dc.js。