设计数据密集型应用读书笔记-第1部分
一. 可靠可扩展与可维护的应用系统
许多新型应用, CPU的处理能力往往不是第一限制因素, 关键在于数据量, 数据复杂度以及数据的快速多变
1. Tweeter问题
Pull
SELECT tweets.*, users.*
FROM tweets
JOIN users ON tweets.sender_id = users.id
JOIN follows ON follows.followee_id = users.id
WHERE follows.follower_id = current_user
Push
Push/Pull相结合
Pull & Push 大V用户特殊处理.
正常用户发Tweeter进行Push处理, 大V用户的Tweeter
2. Response Time
后续作者主要会讨论数据密集型应用的设计, 如何提升系统的可靠性, 可扩展性和可维护性
二. 数据模型与查询语言
语言的边界就是世界的边界
2.1 数据查询语言(声明式/命令式)
// 命令式
function getSharks() {
var sharks = [];
for (var i = 0; i < animals.length; i++) {
if (animals[i].family === "Sharks") {
sharks.push(animals[i]);
}
}
return sharks;
}
// Sql声明式
SELECT * FROM animals WHERE family ='Sharks';
// css声明式
li.selected > p {
background-color: blue;
}
// js命令式
var liElements = document.getElementsByTagName("li");
for (var i = 0; i < liElements.length; i++) {
if (liElements[i].className === "selected") {
var children = liElements[i].childNodes;
for (var j = 0; j < children.length; j++) {
var child = children[j];
if (child.nodeType === Node.ELEMENT_NODE && child.tagName === "P") {
child.setAttribute("style", "background-color: blue");
}
}
}
}
// postgresql
SELECT
date_trunc('month'