前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一知:架构到底是什么?

一日一知:架构到底是什么?

作者头像
青南
发布2022-05-23 14:41:26
6110
发布2022-05-23 14:41:26
举报
文章被收录于专栏:未闻Code未闻Code

一、知识解惑

有同学问:总会听到身边的大佬们谈到架构,感觉很高级,架构到底是一个什么样的东西呢?

首先,我认为架构就是如何组织代码,如何管理数据流。

1. 如何管理代码:你是把所有代码写在一个文件里面还是多个文件?哪种开发效率高?哪种运行效率高?哪种更容易维护?哪种更容易扩展?这几个要求,有时候会互相冲突。架构要平衡这种冲突,避免顾此失彼,尽量兼顾。如果只有几行代码,那你不需要考虑架构。

2. 如何管理数据流:数据是直接写进数据库还是先进消息队列再进数据库?每秒钟1000万个请求,怎么把请求划分到不同的服务器?你现在的基础设施能不能扛住这么大的并发量?如果扛不住,能不能让数据多走路,从而减少对现有设施的冲击?如果数据量低,并发量低,那你不需要考虑架构。

二、问题解答

1

请问下有没有工具或方法可以一次查询多个git项目(本地文件路径),提示哪些是已修改但没有提交的项目。

我自己用的是sourcetree

2

请教一下,我最近在做关于web自动化的项目。项目内容是:在海外社交购物平台做自动注册、及其他操作。(Twitter、Facebook、Amazon等)、我看到网上目前的web自动化框架有selenium、Pyppeteer。我应该学习哪些知识,来完成Web自动化,不会被平台监测到是程序自动化。

不要用selenium了。它能被识别的特征太多了,无论怎么藏都躲不过Facebook。你可以试一试puppeteer或者playwright。他们相对好一些,但也并非没有特征。你在我公众号搜索stealth就能找到它们的特征和解决方案。

但最终极的解决方案是自己编译chromium,难度极高,需要精通C++。但这样你可以把所有特征全部抹掉,真正实现以假乱真。

3

playwright怎么判断页面上有没有某个元素呢?如果判断有某个元素就执行相应的操作,没有就下一步。我用page.wait_for_selector,page.query_selector,page.locator都会出现超时错误,是我用的不对,还是必须要用try语句呢?

用try捕获timeout异常就好了

4

我是爬虫新手,最近在做一个电商爬虫有个问题想要请教一下。目标网站的商品数量大约在20万左右,我想要采集每个商品的详细信息,比如名称,价格,购买量等等。这些详细信息我希望要每天更新(重新爬取),请问应该怎样设计数据库的表比较合理?

目前的做法是把所有商品的详细信息放入一个表中,按录入时间来区分,这样就可以按照时间段来查询商品的价格走势。但随着时间的推移,这个表肯定会变得异常臃肿,查询肯定也会变慢,所以想问一下数据库怎么样设计才合理。

需求:

- 尽可能节省成本

- 能够按时间段查询商品的详细信息,时间跨度半年以上

- 只使用MYSQL

把不变的数据写到一个表里面A表里面,然后把每天更新的数据,以周为单位写到B表里面。B表带上周数,例如第20周的数据b_w20表。第21周的数据b_w21。所有的表都有一个字段叫做item_id,也就是商品id,用来join。

5

当MySQL表的大小增加到多少之后才需要考虑扩容或者迁移的问题?

我认为超过100w就应该分表。

6

金融风控场景,需要存储,并计算用户安装列表,通讯录,短信等数据。同时有不少黑产和中介不停作弊试探规则阈值。他们具有相似的数据特征,如通讯录,安装列表等。新用户来了之后,这些字符串集合需要做对比,如通讯录。感觉这个类似于一个全文检索的功能。方便存储,同时能快速计算出来最相似的top集合,并给出(如jaccard)相似度。这种应该怎么做?感觉用mongodb挺合适的,但是不太懂mongodb的全文索引,聚合,和相似度的算法。

首先,表明一下我的态度:不应该明文存通讯录和用户的安装列表。存了就是令人憎恨的国产流氓软件。以任何理由强制用户上传通讯录的App都是垃圾。

然后说说你的问题。目前有通讯录生成器,可以随机生成名字和手机号。因此通讯录作为特征是不准确的。

你提到的多对多查询,不一定要用Mongodb,关键是匹配算法。实际上你用有限自动机做比较好,它能实现快速的多对多匹配。软件列表,其实就是n个软件名字。是一个数组。新用户来了以后,他的软件列表也是数组。你用集合求交集就可以了。

对与通讯录。手机号就是11位的字符串而已,其实你也可以用集合来做交集。

对于短信,你可以计算simhash。但是短文的sim hash可能不准确,也许用词向量做余弦相似度会更好一些。

至于你说有些库在新服务器上安装不了。那你在老服务器是怎么安装的?难道新老服务器的系统不一样?有一些第三方库依赖一些系统软件,这些系统软件需要使用apt提前安装。

7

分享一个小技巧,当你要在MongoDB里面查询所有『a字段的数据大于b字段的数据』的值的时候,可以这样写:

col.find({'$expr': {'$gt': ['$a', '$b']}})


最近我在做一个爬虫有个疑问不知道咋弄,爬取的数据用web做数据展示,爬虫部分想分离到客户自己机器上。数据汇总到web上。然后现在想在web上去控制。爬虫的启动。停止,客户端可以在web上获取爬取任务,然后跑回传。获取任务的用的get post,客服端那边不能直接链接数据库。所以在纠结有啥好的解决办法。思路没,或者是一些可以参考的实例这样。

中间搭建一个Redis,爬虫while True从Redis里面取数据爬。网页把任务发送到Redis中。如果Redis都不能用,那你网页做一个页面,里面是任务的JSON。爬虫就一直监控这个页面来取任务。你自己再做一个post接口,爬虫爬完的数据post提交到你的网站里面。

主要是不想爬虫那边直接链接数据库。所以才会纠结。这俩个接口都做好了。就是任务频率太大。一直get,现在就是想找个方法来维护爬虫的状态,就停止。启动,自动获取任务。

如果你的问题是:任务频率不高,但是由于爬虫不知道什么时候发布任务,需要高频率访问发布任务的页面。那么有两个方法:

1. 每分钟检查一次,你以为频率很高,但其实并不高。每天才1440次。这个频率非常小,不会带来任何负担。

2. 你可以使用长轮询。

一二线大厂在职员工

十多年码龄的编程老鸟

国内外高校在读学生

中小学刚刚入门的新人

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档