像Google BigTable和Amazon SimpleDB这样的新学校数据存储范例是专门为可扩展性而设计的.基本上,禁止连接和非规范化是实现这一目标的方法.
然而,在这个主题中,共识似乎是大型表上的连接不一定必须太昂贵,并且非规范化在某种程度上被"高估"为什么然后,这些上述系统不允许连接并强制所有连接在一起单表实现可扩展性?是否需要存储在这些系统中的大量数据(许多兆兆字节)?
数据库的一般规则是否根本不适用于这些尺度?是因为这些数据库类型专门用于存储许多类似的对象吗?
或者我错过了一些更大的图片?
database scalability bigtable amazon-simpledb key-value-store
是否有可扩展的http会话管理的最佳实践?
问题空间:
我知道有很多方法可以做到这一点,我总能想出我自己的具体解决方案,但我想知道stackoverflow的人群智慧是否可以帮助我专注于最佳实践
一般来说,似乎有一些方法:
有什么建议?谢谢
我目前正在为瑞士的社交项目创建一个网站.
在用户溢出之前,我想准备应用程序以进行扩展.
我自己回答了许多问题,但有些问题仍未解决.
我解释一下我想做什么.
第一
在开始时,应用程序将只有一个服务器(短时间)与DNS,PHP,Mysql,数据和内存缓存.
第二
然后我将它们分成两部分
第三
这是问题所在,我不知道如何在这里完成它以保持应用程序运行良好.
我可以 :
这将是方案,所有PHP会话都保存在DB中.
但是,我如何同步数据?运行Rsync以使其保持最新状态.将它们放在单独的磁盘(网络磁盘)上以确定吗?但在这种情况下,如果用户上传,我该怎么办?
如果网站获得更多成功并且我们必须继续进行更多结构,那么它会不会在更新上产生一些延迟?
或者直接访问亚马逊的网络服务会是一件好事吗?
一些信息 我使用codeigniter作为框架.我使用linux作为webserver(现在没有选择发布,但应该是Debian)
提前感谢您的回答.
大多数Web框架和"最佳实践"都不适用于性能非常高的站点,而来自供应商的白皮书不值得打印它们的纸张.
那么,应该有人去找找书籍,教程或其他资源,在这个问题上?
我刚读完Restful Web Services,没有人理解REST或HTTP,我正在尝试设计一个RESTful设计的API.
我注意到API URI设计中的一些模式:
http://api.example.com/users
http://example.com/api/users
http://example.com/users
Run Code Online (Sandbox Code Playgroud)
假设这些设计正确使用Accept和Content-type标题用于XHTML,JSON或任何格式之间的内容协商.
这些URI是纯 RESTful实现与隐式内容协商的问题吗?
我的想法是,通过在URI中明确使用API,客户端将期望数据格式本质上不是令人愉悦的超媒体,并且可以在不明确设置Accept标头的情况下更容易地使用.换句话说,API暗示您期望JSON或XML而不是XHTML.
这是在服务器端逻辑上分离资源表示的问题吗?
我能想出为什么有人会用API子域设计URI的唯一理由是,基于我的假设,这是一种扩展技术,它应该使多层服务器基础设施中的路由请求加载更容易.也许情况下反向代理正在剥离标题?我不知道.处理不同表示的不同服务器?
也许子域仅用于外部使用者,以便服务器避免内部使用的开销.限速?
我错过了一点吗?
我提议的设计会尝试通过设置适当的标头来遵循RESTful实践,适当地使用HTTP谓词并以一种方式表示资源,我觉得在URI中包含'API'将是多余的.
为什么有人会在URI中使用'API'设计RESTful API?
或者他们可以吗?也许我不理解这个设计的问题是,只要它遵循一些规范的组合,这可能不会导致RESTful API实现但是接近,这无关紧要?键盘猫皮肤的方法不止一种. HATEOAS有关吗?
更新:在研究这个主题时,我得出结论,重要的是要考虑来自REST的想法,而不是将其视为宗教.因此,在URI中是否具有"api"更多的是设计决策而不是坚定的规则.如果您计划公开公开您的网站的API,最好使用api子域来帮助处理应用程序的逻辑.我希望有人能为他人贡献自己的洞察力.
我正在编写一个高性能的ASP.NET Json API,很快就会有> 1000个请求/秒.我的所有逻辑和处理都是在IHttpHandler中完成的.我通过秒表类测量,处理程序在大约0,1 - 0,5毫秒内完成一个请求.
但似乎IIS和/或其他HTTPHandlers(模块?)正在带走很多性能.我能以某种方式衡量吗?在配置为获得最佳性能时,IIS中的请求会产生多少开销?
将删除所有这些HTTPHandler帮助,还是有其他技巧来加快它?除了Session之外,我不需要太多的ASP.NET功能集(如果能够显着提升性能,甚至可以解决这个问题).
我对于在哪里实现缓存部分有了一些想法.你认为最适合实施它的地方在哪里?
在每个型号内部,还是在控制器中?
// mycontroller.php
MyController extends Controller_class {
function index () {
$data = $this->model->getData();
echo $data;
}
}
// myModel.php
MyModel extends Model_Class{
function getData() {
$data = memcached->get('data');
if (!$data) {
$query->SQL_QUERY("Do query!");
}
return $data;
}
}
Run Code Online (Sandbox Code Playgroud)
// mycontroller.php
MyController extends Controller_class {
function index () {
$dataArray = $this->memcached->getMulti('data','data2');
foreach ($dataArray as $key) {
if (!$key) {
$data = $this->model->getData();
$this->memcached->set($key, $data);
}
}
echo $data;
}
}
// myModel.php
MyModel extends Model_Class{
function …Run Code Online (Sandbox Code Playgroud) 我知道像select,poll,epoll等事件驱动的I/O允许某人建立一个高度可扩展的Web服务器,但我对细节感到困惑.如果只有一个执行线程和一个进程为服务器运行,那么当服务器为就绪客户端运行其"处理"例程时,这不是以串行方式完成的,以处理就绪客户端列表,因为它无法在多核或cpus上安排?此外,当这个处理发生时...服务器不会没有响应?
我曾经认为这是人们使用线程池来处理后端事件I/O的原因,但是当我最近听到不是每个人都使用线程池来处理他们的应用程序时我很困惑.
注意:我在这里搜索过其他类似的Q,并且没有其他回答的问题甚至是远程相似的......有了这个...
我有一个关于MySql表的问题(更准确地说,来自表中的特定字段 - 即tweets或者updates).
那么问题是:InnoDB表上的最大行数是多少?也就是说,如果MyIsam,InnoDB和其他人可以持有的金额之间存在很大差异,那么一般来说,如果没有.其次,如果表格变得非常大,那么存储数据的最佳实践是什么(相同的一个表格,还是分割/多个表格/ dbs)?
我读到Twitter每天都有1亿条推文.在同样的背景下,我的第二个问题如何适用于像twitter这样的东西?
我们正在将我们的集群从Cassandra迁移到完整的ElasticSearch集群.我们正在为每秒平均约250-300个文档索引文档.在ElasticSearch 1.2.0中,它代表每天~8Go.
{
"generic":
{
"id": "twi471943355505459200",
"type": "twitter",
"title": "RT @YukBerhijabb: The Life is Choice - https://m.facebook.com/story.php?story_fbid=637864496306297&id=100002482564531&refid=17",
"content": "RT @YukBerhijabb: The Life is Choice - https://m.facebook.com/story.php?story_fbid=637864496306297&id=100002482564531&refid=17",
"source": "<a href=\"https://twitter.com/download/android\" rel=\"nofollow\">Twitter for Android</a>",
"geo": null,
"link": "http://twitter.com/rosi_sifah/status/471943355505459200",
"lang": "en",
"created_at": 1401355038000,
"author": {
"username": "rosi_sifah",
"name": "Rosifah",
"id": 537798506,
"avatar": "http://pbs.twimg.com/profile_images/458917673456238592/Im22zoIV_normal.jpeg",
"link": "http://twitter.com/rosi_sifah"
}
},
"twitter": {
// a tweet JSON
}
}
Run Code Online (Sandbox Code Playgroud)
我们的用户在我们的SQL数据库中保存请求,当他们要求他们的仪表板时,我们想要请求我们的ES集群查询(从数据库中检索)并使用新的ES聚合框架在其上进行一些聚合.
每个仪表板都显示一个明确的,用户选择的日期范围,因此我们始终使用
"range": {
"generic.created_at": {
"from": 1401000000000,
"to": 1401029019706 …Run Code Online (Sandbox Code Playgroud) scalability ×10
performance ×3
php ×2
aggregate ×1
api-design ×1
asp.net ×1
bigtable ×1
caching ×1
codeigniter ×1
database ×1
events ×1
http ×1
httphandler ×1
innodb ×1
java ×1
linux ×1
max ×1
memcached ×1
mysql ×1
rest ×1
rows ×1
session ×1
uri ×1
web-services ×1