在第四层数据库的三层架构中,有什么意义scaling horizontally和scaling vertically意思?
我试图掌握数据库分区的不同概念,这就是我对它的理解:
水平分区/分片:将表拆分到不同的表中,该表将包含初始表中的行的子集(如果按大陆分割Users表,我已经看到了很多示例,如北美的子表,另一个为欧洲等...).每个分区位于不同的物理位置(了解"机器").据我所知,水平分区和分片是完全相同的(?).
垂直分区:根据我的理解(http://technet.microsoft.com/en-us/library/ms178148%28v=sql.105%29.aspx),有两种垂直分区:
规范化(包括通过拆分表并使用外键链接来从数据库中删除冗余).
Row Splitting,这是我不明白的,Normalization和Row Splitting有什么区别?那两种技术在哪些方面有所不同?
我还读过这篇文章(数据库水平和垂直缩放之间的差异),水平分区和垂直分区之间的区别在于,您通过添加更多机器来扩展第一个,而在第二个中您通过添加更多功率进行扩展( CPU,RAM)到你现有的机器,是一个正确的定义?我认为这两种技术之间的核心区别在于您分割表格的方式.
对于大量问题我很抱歉,但是我有点困惑,因为我遇到的很多不同的网站都说不同的东西.
任何帮助澄清将不胜感激.任何带有几个表格的简单演示的链接也会非常有用.
database database-design sharding database-performance database-partitioning
我正在尝试构建一个运行几十个Scrapy蜘蛛的系统,将结果保存到S3,并在完成时让我知道.StackOverflow上有几个类似的问题(例如这一个和另一个),但它们似乎都使用相同的建议(来自Scrapy文档):设置a CrawlerProcess,将蜘蛛添加到它,然后点击start().
但是当我用所有325个蜘蛛尝试这个方法时,它最终锁定并失败,因为它试图在运行它的系统上打开太多文件描述符.我尝试了一些没有用的东西.
使用Scrapy运行大量蜘蛛的推荐方法是什么?
编辑添加:我明白我可以扩展到多台机器并支付服务以帮助协调(例如ScrapingHub),但我更喜欢在一台机器上使用某种进程池+队列来运行它,这样只需要一个小的固定蜘蛛数量同时在运行.
我知道由于答案的主观性,此类问题对于 SO 来说是边缘性的,但是 NodeJS/ExpressJS/HandlebarsJS 全栈项目的目录结构是否有任何标准或最佳实践?
我有几个这样的项目,在每个项目中我仍然在努力寻找最好的方法:
client/和分开吗server/?node_modules/目录和两个各自的目录package.json,一个用于客户端,另一个用于服务器?templates/和放在哪里呢?views/database ×2
express ×1
node.js ×1
performance ×1
python ×1
scalability ×1
scrapy ×1
sharding ×1
web-scraping ×1