实际技术选型的考虑因素

最近在工作中我需要把数据从公共的Data Warehouse(数据仓库)导出来,放到属于我们team自己账号的云端存储资源中去,然后再在我们的应用中查询这样的资源。需要导出数据是因为直接从Data Warehouse查询数据是一个缓慢而且异步的过程,而我们的应用数据查询需要实时性。现在要解决这个问题有一些AWS的服务可供我们可以选择,基本上分成了两大类:

第一类是存储和内容分发(Storage & Content Delivery):

  • CloudFront:CloudFront是用于内容分发给不同地区用户的,它在全球设有数个“edge”,作为临近网络访问数据的入口。就如同大网站建立的CDN设备一样。这显然不是我需要的。
  • Glacier:Glacier非常用来适合存储不常用的、压缩的和备份的海量文件数据,在集中文件存储的服务中,它是最便宜的。比如存储日志、备案资料等等。当然,它牺牲了数据传输的性能和一致性。显然它也不适合我的场景。
  • S3:S3(Simple Storage Service)适合存储原始数据、大对象(单个上限5Tb),费用比数据库服务低。如果我最终决定使用文件系统来存储数据,它是一个好的选择。另外,无论是Glacier还是S3,层级概念上最大的以及都是地区级别的(在Glacier里面叫做vault,在S3里面叫做bucket,每个这样的单元都位于某一个地区,例如Asin Pacific),因此如果需要全球多个节点访问同一份数据,需要额外把数据分发到各个地区去。
  • Storage Gateway:Storage Gateway是用于集成IT环境的内部部署的,它支持基于网关缓存的优化或者是网关存储的优化,便于本地和临近网络快速获取数据。它可以用于公司内部不同地理位置的文件共享、镜像或者备份,也不适合我这里的场景。

选择文件存储不能提供数据库的条件查询等功能,目前我的场景下并不需要,我只需要根据不同的区域和数据唯一键来获取数据集就可以了,否则,我需要考虑数据库服务:

  • DynamoDB:DynamoDB是挂在云上的NoSQL数据库服务,每一张表都需要指定一个hash的主键或者是hash加range两层的主键,同时,它的数据读取和存储的最小单位是4KB,也就是说,存取0.5KB和4KB的数据,性能表现是几乎一样的。从数据量来看,如果选择数据库服务,它是最适合解决我的问题。
  • SimpleDB:和DynamoDB相似,非关系型数据库,结构可随意变换,而且数据自动索引,所以查询是非常快的。它的数据容量小得多,有一个典型用法是使用SimpleDB来存储S3的文件地址,就像“指针”一样。但是它的容量限制需要考虑,每个domain只有10G的上限,可以建立多个domain,但是那样就需要应用自己来路由选择domain了。关于一致性,它和DynamoDB一样,可以选择最终一致性和强一致性,当然,强一致性需要花费更多钱,还会降低吞吐量。
  • ElastiCache:把Memcached或者Redis搬到了云上,这显然不是我需要的。
  • RDS:RDS(Relational Database Service)相当于把关系型数据库搬到了云上,它和DynamoDB或者SimpleDB的区别,主要就是RDB和NoSQL DB的区别。
  • RedShift:RedShift是一个数据仓库服务,利用列式存储技术及节点间并行分布式查询,对于上P的数据访问做了优化。

在这里还可以找到这几个AWS上数据库服务的不同,用一表以蔽之:

If You NeedConsider Using 
A relational database service with minimal administration

Amazon RDS, a fully managed service that offers a choice of MySQL, Oracle or SQL Server database engines, scale compute & storage, Multi-AZ availability and more.

 
A fast, highly scalable NoSQL database service

Amazon DynamoDB, a fully managed service that offers extremely fast performance, seamless scalability and reliability, low cost and more.

 
A NoSQL database service for smaller datasets

Amazon SimpleDB, a fully managed service that provides a schemaless database, reliability and more.

 
A relational database you can manage on your own

Your choice of relational AMIs on Amazon EC2 and EBS that provide scale compute & storage, complete control over instances, and more.

 

再有另一个技术选型的例子,在web容器中选择Tomcat还是Jetty。Jetty结构简单,容易定制其组件,也就是说,小和简单(这也是当初Google选择它作为app引擎的最重要原因),是它最大的优势。Jetty在同时处理大量连接并且需要长时间保持这些连接的时候,性能上更有优势,因为它是基于NIO,而不是Tomcat的BIO来处理请求的;但是我们也能找到很多性能测试的数据,在对于连接生命周期非常短而且非常频繁的请求,Tomcat的性能要优于Jetty。

实际技术选型的考虑因素

以下摘选自《Jetty VS Tomcat Performance Comparison》的二者比较:

Jetty Features and Powered:

  • Full-featured and standards-based.
  • Embeddable and Asynchronous.
  • Open source and commercially usable.
  • Dual licensed under Apache and Eclipse.
  • Flexible and extensible, Enterprise scalable.
  • Strong Tools, Application, Devices and Cloud computing supported.
  • Low maintenance cost.
  • Small and Efficient.

Tomcat Features and Powered:

  • Famous open source under Apache.
  • Easier to embed Tomcat in your applications, e.g. in JBoss.
  • Implements the Servlet 3.0, JSP 2.2 and JSP-EL 2.2 support.
  • Strong and widely commercially usable and use.
  • Easy integrated with other application such as Spring.
  • Flexible and extensible, Enterprise scalable.
  • Faster JSP parsing.
  • Stable.

在选择实现技术的时候经常会遇到这样或那样的选择题,上面的两个例子,都是相对理性地分析和比较的例子。我们考虑的内容往往包括功能、性能、社区支持、扩展性和定制性、已知问题和约束等等。

但是,具有讽刺意味的是,仔细想想,实际上我们选择某一项技术的最重要的原因,却远远不是那些“理智的分析”,而是下面这些:

  • “因为大家都在用它啊”,比如项目用Java或者C++作为主要语言来实现,我想很多人和我一样,经常并没有经过太多思考,这似乎是一个思维惯性。
  • “因为我没有用过这项技术,我感兴趣,我想学一下”,其实这也无可厚非,我以前也经历过一个项目组,大部分人(包括主管在内),都排斥使用新技术,原因是担心风险。我原则上认同风险一说,但是适度范围内给程序员选择技术的自由从长远看是有好处的,尤其是技术也是需要进步的。把所有问题都让“工程商人”来解决,只会让目光过于浅近。
  • “因为我只知道它啊”,这种情况更多。你为什么选择C3P0连接池?因为那时候我不知道还有哪些别的数据库连接池……

工程师总会在技术选型的时候寻找某种平衡,纸面上未必会写这三条理由,但是心里面,有意识无意识地,一定会给向着这三条理由倾斜。

现在让我们退一步,倘若我们都非常理性地评估了类似技术的优缺点,但是在真正使用技术实现的时候,却发现,实际上这几条类似的技术都可以实现,选哪个关系并不大。因为数据规模、问题大小,都不足以到了非得区分类似技术优劣的地步。举例来说,持久层使用MyBatis还是Hibernate,优秀的程序员可以说出二者各自的好处是什么,也许对于大型项目至关重要;但是也有程序员会吐槽,其实用哪个都可以啊,好处坏处的差异并没有那么明显,因为我的项目那么小,需要的数据库读写如此简单……

有人说,小项目可以帮助拓宽技术视野,但是只做小项目无法深入了解技术本身,因为你无从比较并理解类似技术的优劣。这也是“玩具代码”在学新东西的时候有成就感,也很适合技术分享的胶片之用,却无法带来工程师持续成长的原因。

你觉得是不是这样呢?

文章系本人原创,转载请保持完整性并注明出自《四火的唠叨》

硬件测试入门--环路响应(Bode)测试 环路分析的一个重要作用就是分析开关电源的稳定性。扫频测试原理主要是给开关电源电路注入一个频率变化的正弦信号,测量开关电源在频域上的特性,通过分析穿越频率、增益裕度和相位裕度来判断环路是否稳定,可以为电子工程师设计稳定的控制电路提供直观的数据。开关电源的稳定性关系到整个应用系统的可靠性,利用伯德图可以看出在不同频率下系统增益的大小和相位。通过伯德图来对开关电源的环路稳定性进行判断和分析已经成为评估开关电源可靠性必不可少的方法。 阅读详情

相关推荐

il2cpp分析-gobal-metadata.dat解密

打开ida,把libil2cpp拖到ida中按快捷键Shift+F12等待字符串分析完后,搜索global-metadata.dat。ida中双击sub_57EE7C进入,VS code中也跳转到LoadMetadataFile函数。VSCode打开il2cpp源代码,全局搜索global-metadata.dat。工具:010Editor,IDA 7.5,Jadx,VS Code。判断加密逻辑为根据文件的长度循环读取字节码做亦或加密。双击搜索出来的结果,切记要选il2cpp目录下的。

Android_machong的博客 8024

七牛云不同账号之间的数据迁移

七牛云不同账号之间的数据迁移迁移相关命令行注意事项相关命令行参考文档 1、由A —> B的数据迁移,首先登录B账户,创建一个新的bucket,开启B账户的空间授权,允许A账户可以对B账号进行可读可写权限。详细步骤:点击空间权限 -》输入A账户账号 -》读写权限 -》 确定创建。随后登录A账户, 当看到A账户出现B账户开启空间权限的 bucketName 时,操作便完成。 2、下载qshel...

qq_34810558的博客 4434

DIC新手避坑指南:压缩实验中的应变测量常见错误与数据校验技巧

本文为DIC技术新手提供了压缩实验中应变测量的全面避坑指南。文章系统梳理了从试样尺寸录入、散斑质量到数据后处理中应变方向与符号混淆、数据插值对齐等常见错误,并分享了基于MATLAB的自动化数据校验与可视化对比技巧,帮助建立可靠的实验数据分析SOP,确保DIC测量结果的准确性。

weixin_29313423的博客 113

七牛云存储OSS数据迁移与复制bucket和laravel中使用

以下是PYTHON代码。

webnoties的专栏 944

引入高分辨率特征层保持的YOLOv10小目标增强:从思路到完整实现

大概两个月前,我在做一个无人机航拍图像检测的项目,目标是识别图片里的小型车辆和行人。用的数据集是VisDrone,相信做小目标检测的朋友对这个数据集都不陌生。一开始我直接跑了官方YOLOv10的代码,结果在tiny vehicle这一类上mAP50只有可怜的0.312。那些小目标基本就是几个像素点,YOLOv10在三次下采样之后,这些小目标的特征几乎就消失不见了。 后来我折腾了大概三周,尝试了各种方法:改anchor、调loss权重、做数据增强、甚至考虑过换检测头。最后发现最有效的还是引入一个高分辨率特征

YOLO 50

YOLOv13改进策略【特征提取层】| CVPR-2024 PKI Module 获取多尺度纹理特征,适应尺度变化大的目标

PKI Module是。

Limiiiing的博客 276

架构设计的五个核心要素

架构中五个重要的核心指标:分别是性能、可用性、伸缩性、扩展性和安全性。

大道至简,持之以恒! 1995

SAP 公司间采购简介

SAP公司间采购(Intercompany Procurement)是指企业集团内部不同法人实体之间的采购和销售流程。这种流程在跨国公司或有多个独立运营子公司的企业中非常常见。SAP提供了标准的功能来处理公司间采购,确保财务和物流流程的透明性和效率。以下是SAP公司间采购的基本流程及其相关模块的简介。

我小时候很黑的博客 1378

技术选型考察哪些方面

在进行技术选型时,需要考虑多个方面,确保所选择的技术能够满足项目的需求,并且在实施过程中具备可行性和可维护性。

Mamba Out 977

深度剖析:Spring AI 与 LangChain4j,谁才是 Java 程序员的 AI 开发利器?

首先介绍 AI 时代 Java 开发框架选择背景,接着对比两者功能特性(Spring AI 的生态集成与标准化设计、LangChain4j 的多模型适配与提示工程)、应用场景(企业级系统改造与创新产品开发)、开发体验(学习成本与调试工具)、生态扩展(Spring 商业支持与 LangChain4j 开源社区)、性能安全(企业级优化与自主安全实现)及成本趋势(短期投入、长期回报与技术演进),最后给出选型建议与混合架构方案。

博客 5445

基于VLFM的中文指令视觉语言导航系统设计与实现

文章摘要 本文介绍了一个基于VLFM(视觉语言边界地图)的中文指令视觉语言导航系统设计与实现。该系统采用模块化架构,包含三维场景渲染、URDF机器人仿真、VLFM导航引擎、中文指令解析和PyQt图形界面五大核心模块。系统支持自定义GLB场景模型和URDF机器人模型,通过transformers和langchain实现中文自然语言指令解析,利用VLFM算法进行语义导航决策。技术实现上详细介绍了GLB模型加载器开发、URDF机器人控制、VLFM导航算法集成以及PyQt界面设计。该系统在Ubuntu环境下运行,依

AI的内部世界的博客 208

在做技术选型时你该考虑哪些因素?

在日常开发中,我们经常要面对各种相似而又繁多的技术框架组件选择,在专业上我们叫做技术选型。关于技术选型的选型原则,我个人的建议有如下几点: 1、最好使用开源产品。 如果在使用过程中遇到一些bug,你可以通过源码阅读和分析,快速的进行修复。 2、最好选择比较流行的产品。 该产品要有一个相对活跃的社区或者在github上star数比较高,这样意味着产品bug更少相对更加稳定成熟,而且与周边的生态系统有更好的兼容性。而在出现问题时,你也可以快速找到解决方案。 3、要根据具体的需求场景来选型,避免过度设计

般若的博客 3187

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

技术选型因素及示例

项目技术选型考虑因素及实战示例

weixin_44200049的博客 803

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

技术总结写作指南:从模糊标题到结构化复盘

技术总结是工程师知识沉淀与经验复用的核心能力,其本质是将实践过程中的问题、决策、结果进行结构化编码。原理上依赖于目标对齐、关键节点提取与因果链还原,技术价值体现在降低团队认知成本、加速新人上手、支撑技术决策回溯。典型应用场景包括项目复盘、故障分析、学习笔记整理及OKR/周报输出。尤其在缺乏明确输入(如‘一次总结’这类泛化标题)时,需主动识别隐含对象、补全主谓宾要素,并建立可验证的逻辑闭环——这正是专业级技术总结区别于流水账的关键所在。

weixin_34208185的博客 691

谈谈开源技术选型

 有时感觉技术选型就像个伪命题,胜出的技术占据绝对的主流,就像 java 领域中 ejb 被 ssh/ssi 框架取代。 大部分项目使用近似的模式搭建,选型在工程中变得似乎可有可无。 时间上胜出的开源技术帮助开发者在客观上做出了选择,我们先了解下影响选型的客观因素。 客观因素 客观因素包括如下: 1. 广泛性 我们都倾向于选择更广泛应用的开源技术以规避未知性风险。

厚积薄发的博客 783

技术选型的一点个人思考

1前言这个题目有点大。工作也有些年头,从开始入行的被动接受,什么流行就学什么;到有一些想法,会去思考为什么使用这种技术;再到主动去学习一些前沿框架。从开始的不理解,事不关已高高挂起,不在...

不是太高的手的专栏 211

C++跨平台(三):进程间通讯(IPC)的技术选型

本系列继续记录,作为一个新人小白,在第一次接触C++跨平台(win、linux、mac)开发的经验和踩坑。 前言 在四个月前,我还是一名学生,开发一个功能,我的需求就是能跑就行,最多加一个没有bug。 而现在,在一次次的开会中,我成为了憔悴的社会打工人,也明白了在代码开发前,更重要的是设计和架构,确定好大方向,后面的事情才能走在正确的道路上。 开发一个功能,没有bug的运行自然是最低要求,但是往往在开发前,需要经过技术选型,选择一个最适合的方案,这几天有一个跨进程通信的需求,我们就使用什么方案也经过讨论.

CodeBowl的博客 6181

服务网关及技术选型对比分析

在选择服务网关技术时,需要根据企业的实际需求和场景进行综合考虑。对于使用Spring Cloud生态的企业来说,Spring Cloud Gateway是一个不错的选择;如果需要高度定制化和扩展性,可以考虑Kong;如果需要在容器化部署的微服务架构中使用,Traefik是一个值得考虑的选择;而Zuul则适合与Netflix的其他组件一起使用。此外,Nginx也是一个性能卓越、广泛使用的选择,但可能不太适合处理高级微服务方案。在实际应用中,还需要结合具体的业务场景、技术栈以及性能需求等因素进行权衡和决策。

thinking-fish的博客 1096

当 AI 在技术选型会上比你更能唠:初级开发者的「技术栈话语权」保卫战 —— 老程序员的茶歇胡侃

“在代码的世界里,只有不断学习和思考的人,才能永远站在技术的前沿。” 希望咱们初级开发者都能在 AI 时代,找到自己的位置,不断成长,成为真正的技术大牛。

宝码香车的博客 1332

HTML5 VS. Flash&Flex? – 浅谈Flash/Flex/HTML 5技术选型

在HTML5发布以前,RIA领域的技术解决方案一直相都是各展所长,并无争议。Adobe体系中,Flash做不了的事情,Flex可以做到;.Net系决策者在选用RIA解决方案时,Silverlight是不二之选。 曾经我对Flex的迷恋到了欲罢不能的地步,与我有相同想法的人亦不在少数,Flex也大有“一统江湖”的趋势。然而,随着HTML 5横空出世,Flex“易主”,Silverlight被“雪藏

Rainman的专栏 1270

‌前后端分离还是模板渲染?SpringBoot技术选型实践

在SpringBoot项目中,选择前后端分离架构还是模板渲染架构,是一个常见的技术决策。下面我将逐步分析两种方案的优缺点,并结合SpringBoot实践给出建议,确保回答真实可靠,基于行业最佳实践。在SpringBoot中,性能指标可量化:例如,模板渲染的响应时间通常在$50-100ms$,而前后端分离的API延迟可能低至$10-50ms$,但整体加载时间受前端影响。通过以上分析,您可以根据具体需求做出明智选择。如果您提供更多项目细节(如团队规模或功能需求),我可以给出更定制化的建议!

2501_93877439的博客 909

大数据架构技术选型:2024年最值得关注的10大技术

随着互联网、物联网等技术的飞速发展,数据量呈现出爆炸式增长。企业每天都会产生大量的结构化和非结构化数据,这些数据蕴含着巨大的商业价值。然而,要从海量的数据中提取有价值的信息并非易事,需要强大的大数据架构来支撑。合适的大数据架构技术能够提高数据处理效率、降低成本、提升决策的科学性,因此技术选型成为了大数据项目成功的关键因素之一。大数据架构就像是一座城市的基础设施,它负责管理和处理城市中(企业)产生的各种信息(数据)。

专注搜索引擎技术 821

浅谈 Flash/Flex/HTML5 技术选型(html5 vs flash)

在HTML5发布以前,RIA领域的技术解决方案一直相都是各展所长,并无争议。Adobe体系中,Flash做不了的事情,Flex可以做到;.Net系决策者在选用RIA解决方案时,Silverlight是不二之选。 曾经我对Flex的迷恋到了欲罢不能的地步,与我有相同想法的人亦不在少数,Flex也大有“一统江湖”的趋势。然而,随着HTML 5横空出世,Flex“易主”,Silverlight被“雪藏

tianpeiwen的专栏 386

为什么国内有不少PHP程序员不喜欢THINKPHP,甚至鄙视THINKPHP?

为什么国内有不少PHP程序员不喜欢THINKPHP,甚至鄙视THINKPHP?

春暖花开 2642

hiring-without-whiteboards技术选型:为什么选择JavaScript生态

在技术招聘领域,传统的"白板面试"(Whiteboard Interview)模式长期困扰着开发者和企业。这种以算法谜题和计算机科学理论为主的面试方式,往往无法真实反映候选人的实际工作能力。hiring-without-whiteboards项目应运而生,旨在收集和推广那些采用更合理面试流程的公司。 作为一个开源项目,技术选型至关重要。为什么选择JavaScript生态系统?这背后蕴含着对项目目...

gitblog_00540的博客 300
上一篇: Java8集合中的Lambda表达式
下一篇: Hadoop无法解决的问题
RayChase
博客等级 码龄20年 71粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值