学习物联网应用工程师,以后能从事哪些工作岗位?

学习物联网应用工程师,以后能从事哪些工作岗位?,第1张

物联网应用工程师的人才群体,主体应该包括IT和OT工程师。

从事方向大概有:智慧交通、环境保护、政府工作、公共安全、平安家居、智能消防、工业监测、环境监测、老人护理、个人健康、花卉栽培、水系监测、食品溯源、敌情侦查和情报搜集等多个领域而具体

工作岗位有:硬件设计师、嵌入式固件开发人员、无线通讯专家 、后端开发人员 、前端开发人员 、应用开发人员 、自动化与系统集成工程师 、数据科学家等。

硬件设计师:大多数物联网项目都涉及某种形式的定制硬件设计。硬件的复杂度因项目而异。在某些情况下,使用硬件模块和参考设计,基础知识和电气工程知识就足够了。而有些更复杂的项目则需要更多的经验和专业知识。常见的技术有印刷电路板(PCB)设计、无线电频率与天线设计、时钟,信号路由相关的经验、低功耗设计和功耗优化等

嵌入式固件开发人员:让硬件发挥作用,你就需要嵌入式开发人员。他们是从事最底层、最接近裸机硬件的软件开发人员。这样的软件称为固件(介于软件和硬件之间的固件)。一般这些开发人员的背景结合了电气工程、计算机体系结构和软件开发。嵌入式开发人员的工作需要与最终硬件的原型版本打交道,因此通常他们的办公桌看起来都很凌乱。 常见的技术有编程语言(C、汇编语言、C++)、实时 *** 作系统(RTOS)经验(FreeRTOS、Contiki、Zephyr)、嵌入式Linux、源代码版本控制、物理和信息安全等

无线通讯专家:大多数物联网项目都是无线的,但无线技术都很难,因为无线集物理与软件的双重复杂度于一身。通常无线通信专家都来自无线通信、网络协议和软件开发。对于大型物联网系统来说,拥有无线通信的专长才能适当地确定网络与通信模式。而消费级物联网系统则需要无线通信专长来确保通过蓝牙顺利地将设备连接到用户的智能手机。 常见的技术有网络模拟、无线网格网络、对无线传播技术的掌握、对功耗的掌握、协议(TCP/IP、IPv4、IPv6、RPL、TLS、WiFi、蓝牙、6lowpan、ZigBee、LoRA、MQTT、CoAP)

后端开发人员:在物联网系统中,后端需要处理数据库和应用程序逻辑。通常,后端都部署在云主机中,并负责存储来自物联网设备的数据、对用户进行身份验证、为前端以及与其他系统的集成提供API。 常见的技术有编程语言(JavaScript、Go、Python、Ruby)、数据库(MySQL、MongoDB、Redis)、开发运维经验、云平台(亚马逊的AWS、Heroku、微软的Azure)

前端开发人员:大多数物联网项目都有网页形式的前端。用户可以通过这类网页与系统交互。因此,这些网页需要做到易于使用、安全、可在最常见的Web浏览器中运行并保持最新状态。这些前端是用HTML开发的,而且通常都会采用某些现有的JavaScript前端框架。前端开发人员需要通过大量输出到网页上的文本来创建视觉体验。 常见的技术有UI/UX设计、用户访谈与人机交互的经验、HTML、CSS、Javascript、Web开发框架(Vuejs、React、Bootstrap)

应用开发人员:许多面向用户的物联网项目都需要使用移动应用作为用户界面。随着项目的推进,移动应用体验的重要性越来越突出。通常,我们需要开发和维护两个版本:iOS和Android。有时也可以开发混合原生应用(通常用HTML开发)。大多数应用开发人员都清楚原生与混合框架的优缺点。 常见的技术有Android、iOS开发原生/混合框架(Phonegap/Cordova、Ionic、Angular、React、Vue)、编程语言(Java、Swift、Objective C、JavaScript)

自动化与系统集成工程师:许多物联网项目都需要与现有软件集成。软件集成是一项经常被低估的任务,我们常常需要花费大量精力,运用一套特定的技术才能取得成功。此外,一旦软件集成开始,你就必须确保集成保持正常运行。这时我们就需要采用自动测试。系统集成和自动化工程师需要拥有大量实践经验和勇气,因为这是一项艰巨的工作。 常见的技术有自动测试框架(Jenkins、Mocha、Travis)、REST API、编程语言(Javascript、Java、Python、Bash)

数据科学家:物联网项目都需要围绕数据展开,而且你需要充分利用这些数据。在项目的早期阶段,这部分的工作可能很简单,只需将关键绩效指标放入Excel工作表中进行比较即可。但是随着项目的发展,你需要针对数据展开更深入的分析。这时就需要数据科学家的帮忙。数据科学家可以通过复杂的数据,寻找模式以及可付诸行动的信息,而这才是数据的最终价值。 常见的技术有统计、人工智能、机器学习、数据挖掘、编程语言(Matlab、R、Python)

常见的大数据术语表(中英对照简版):
A
聚合(Aggregation) – 搜索、合并、显示数据的过程
算法(Algorithms) – 可以完成某种数据分析的数学公式
分析法(Analytics) – 用于发现数据的内在涵义
异常检测(Anomaly detection) –
在数据集中搜索与预期模式或行为不匹配的数据项。除了“Anomalies”,用来表示异常的词有以下几种:outliers, exceptions,
surprises, contaminants他们通常可提供关键的可执行信息
匿名化(Anonymization) – 使数据匿名,即移除所有与个人隐私相关的数据
应用(Application) – 实现某种特定功能的计算机软件
人工智能(Artificial Intelligence) –
研发智能机器和智能软件,这些智能设备能够感知周遭的环境,并根据要求作出相应的反应,甚至能自我学习
B
行为分析法(Behavioural Analytics) –
这种分析法是根据用户的行为如“怎么做”,“为什么这么做”,以及“做了什么”来得出结论,而不是仅仅针对人物和时间的一门分析学科,它着眼于数据中的人性化模式
大数据科学家(Big Data Scientist) – 能够设计大数据算法使得大数据变得有用的人
大数据创业公司(Big data startup) – 指研发最新大数据技术的新兴公司
生物测定术(Biometrics) – 根据个人的特征进行身份识别
B字节 (BB: Brontobytes) – 约等于1000 YB(Yottabytes),相当于未来数字化宇宙的大小。1
B字节包含了27个0!
商业智能(Business Intelligence) – 是一系列理论、方法学和过程,使得数据更容易被理解
C
分类分析(Classification analysis) – 从数据中获得重要的相关性信息的系统化过程; 这类数据也被称为元数据(meta
data),是描述数据的数据
云计算(Cloud computing) – 构建在网络上的分布式计算系统,数据是存储于机房外的(即云端)
聚类分析(Clustering analysis) –
它是将相似的对象聚合在一起,每类相似的对象组合成一个聚类(也叫作簇)的过程。这种分析方法的目的在于分析数据间的差异和相似性
冷数据存储(Cold data storage) – 在低功耗服务器上存储那些几乎不被使用的旧数据。但这些数据检索起来将会很耗时
对比分析(Comparative analysis) – 在非常大的数据集中进行模式匹配时,进行一步步的对比和计算过程得到分析结果
复杂结构的数据(Complex structured data) –
由两个或多个复杂而相互关联部分组成的数据,这类数据不能简单地由结构化查询语言或工具(SQL)解析
计算机产生的数据(Computer generated data) – 如日志文件这类由计算机生成的数据
并发(Concurrency) – 同时执行多个任务或运行多个进程
相关性分析(Correlation analysis) – 是一种数据分析方法,用于分析变量之间是否存在正相关,或者负相关
客户关系管理(CRM: Customer Relationship Management) –
用于管理销售、业务过程的一种技术,大数据将影响公司的客户关系管理的策略
D
仪表板(Dashboard) – 使用算法分析数据,并将结果用图表方式显示于仪表板中
数据聚合工具(Data aggregation tools) – 将分散于众多数据源的数据转化成一个全新数据源的过程
数据分析师(Data analyst) – 从事数据分析、建模、清理、处理的专业人员
数据库(Database) – 一个以某种特定的技术来存储数据集合的仓库
数据库即服务(Database-as-a-Service) – 部署在云端的数据库,即用即付,例如亚马逊云服务(AWS: Amazon Web
Services)
数据库管理系统(DBMS: Database Management System) – 收集、存储数据,并提供数据的访问
数据中心(Data centre) – 一个实体地点,放置了用来存储数据的服务器
数据清洗(Data cleansing) – 对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性
数据管理员(Data custodian) – 负责维护数据存储所需技术环境的专业技术人员
数据道德准则(Data ethical guidelines) – 这些准则有助于组织机构使其数据透明化,保证数据的简洁、安全及隐私
数据订阅(Data feed) – 一种数据流,例如Twitter订阅和RSS
数据集市(Data marketplace) – 进行数据集买卖的在线交易场所
数据挖掘(Data mining) – 从数据集中发掘特定模式或信息的过程
数据建模(Data modelling) – 使用数据建模技术来分析数据对象,以此洞悉数据的内在涵义
数据集(Data set) – 大量数据的集合
数据虚拟化(Data virtualization) –
数据整合的过程,以此获得更多的数据信息,这个过程通常会引入其他技术,例如数据库,应用程序,文件系统,网页技术,大数据技术等等
去身份识别(De-identification) – 也称为匿名化(anonymization),确保个人不会通过数据被识别
判别分析(Discriminant analysis) –
将数据分类;按不同的分类方式,可将数据分配到不同的群组,类别或者目录。是一种统计分析法,可以对数据中某些群组或集群的已知信息进行分析,并从中获取分类规则。
分布式文件系统(Distributed File System) – 提供简化的,高可用的方式来存储、分析、处理数据的系统
文件存贮数据库(Document Store Databases) – 又称为文档数据库(document-oriented database),
为存储、管理、恢复文档数据而专门设计的数据库,这类文档数据也称为半结构化数据
E
探索性分析(Exploratory analysis) –
在没有标准的流程或方法的情况下从数据中发掘模式。是一种发掘数据和数据集主要特性的一种方法
E字节(EB: Exabytes) – 约等于1000 PB(petabytes), 约等于1百万 GB。如今全球每天所制造的新信息量大约为1
EB
提取-转换-加载(ETL: Extract, Transform and Load) –
是一种用于数据库或者数据仓库的处理过程。即从各种不同的数据源提取(E)数据,并转换(T)成能满足业务需要的数据,最后将其加载(L)到数据库
F
故障切换(Failover) – 当系统中某个服务器发生故障时,能自动地将运行任务切换到另一个可用服务器或节点上
容错设计(Fault-tolerant design) – 一个支持容错设计的系统应该能够做到当某一部分出现故障也能继续运行
G
游戏化(Gamification) –
在其他非游戏领域中运用游戏的思维和机制,这种方法可以以一种十分友好的方式进行数据的创建和侦测,非常有效。
图形数据库(Graph Databases) –
运用图形结构(例如,一组有限的有序对,或者某种实体)来存储数据,这种图形存储结构包括边缘、属性和节点。它提供了相邻节点间的自由索引功能,也就是说,数据库中每个元素间都与其他相邻元素直接关联。
网格计算(Grid computing) – 将许多分布在不同地点的计算机连接在一起,用以处理某个特定问题,通常是通过云将计算机相连在一起。
H
Hadoop – 一个开源的分布式系统基础框架,可用于开发分布式程序,进行大数据的运算与存储。
Hadoop数据库(HBase) – 一个开源的、非关系型、分布式数据库,与Hadoop框架共同使用
HDFS – Hadoop分布式文件系统(Hadoop Distributed File
System);是一个被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统
高性能计算(HPC: High-Performance-Computing) – 使用超级计算机来解决极其复杂的计算问题
I
内存数据库(IMDB: In-memory) –
一种数据库管理系统,与普通数据库管理系统不同之处在于,它用主存来存储数据,而非硬盘。其特点在于能高速地进行数据的处理和存取。
物联网(Internet of Things) – 在普通的设备中装上传感器,使这些设备能够在任何时间任何地点与网络相连。
J
法律上的数据一致性(Juridical data compliance) –
当你使用的云计算解决方案,将你的数据存储于不同的国家或不同的大陆时,就会与这个概念扯上关系了。你需要留意这些存储在不同国家的数据是否符合当地的法律。
K
键值数据库(KeyValue Databases) –
数据的存储方式是使用一个特定的键,指向一个特定的数据记录,这种方式使得数据的查找更加方便快捷。键值数据库中所存的数据通常为编程语言中基本数据类型的数据。
L
延迟(Latency) – 表示系统时间的延迟
遗留系统(Legacy system) – 是一种旧的应用程序,或是旧的技术,或是旧的计算系统,现在已经不再支持了。
负载均衡(Load balancing) – 将工作量分配到多台电脑或服务器上,以获得最优结果和最大的系统利用率。
位置信息(Location data) – GPS信息,即地理位置信息。
日志文件(Log file) – 由计算机系统自动生成的文件,记录系统的运行过程。
M
M2M数据(Machine2Machine data) – 两台或多台机器间交流与传输的内容
机器数据(Machine data) – 由传感器或算法在机器上产生的数据
机器学习(Machine learning) –
人工智能的一部分,指的是机器能够从它们所完成的任务中进行自我学习,通过长期的累积实现自我改进。
MapReduce – 是处理大规模数据的一种软件框架(Map: 映射,Reduce: 归纳)。
大规模并行处理(MPP: Massively Parallel Processing) –
同时使用多个处理器(或多台计算机)处理同一个计算任务。
元数据(Metadata) – 被称为描述数据的数据,即描述数据数据属性(数据是什么)的信息。
MongoDB – 一种开源的非关系型数据库(NoSQL database)
多维数据库(Multi-Dimensional Databases) – 用于优化数据联机分析处理(OLAP)程序,优化数据仓库的一种数据库。
多值数据库(MultiValue Databases) – 是一种非关系型数据库(NoSQL),
一种特殊的多维数据库:能处理3个维度的数据。主要针对非常长的字符串,能够完美地处理HTML和XML中的字串。
N
自然语言处理(Natural Language Processing) –
是计算机科学的一个分支领域,它研究如何实现计算机与人类语言之间的交互。
网络分析(Network analysis) – 分析网络或图论中节点间的关系,即分析网络中节点间的连接和强度关系。
NewSQL – 一个优雅的、定义良好的数据库系统,比SQL更易学习和使用,比NoSQL更晚提出的新型数据库
NoSQL –
顾名思义,就是“不使用SQL”的数据库。这类数据库泛指传统关系型数据库以外的其他类型的数据库。这类数据库有更强的一致性,能处理超大规模和高并发的数据。
O
对象数据库(Object Databases) –
(也称为面象对象数据库)以对象的形式存储数据,用于面向对象编程。它不同于关系型数据库和图形数据库,大部分对象数据库都提供一种查询语言,允许使用声明式编程(declarative
programming)访问对象
基于对象图像分析(Object-based Image Analysis) –
数字图像分析方法是对每一个像素的数据进行分析,而基于对象的图像分析方法则只分析相关像素的数据,这些相关像素被称为对象或图像对象。
*** 作型数据库(Operational Databases) –
这类数据库可以完成一个组织机构的常规 *** 作,对商业运营非常重要,一般使用在线事务处理,允许用户访问 、收集、检索公司内部的具体信息。
优化分析(Optimization analysis) –
在产品设计周期依靠算法来实现的优化过程,在这一过程中,公司可以设计各种各样的产品并测试这些产品是否满足预设值。
本体论(Ontology) – 表示知识本体,用于定义一个领域中的概念集及概念之间的关系的一种哲学思想。(译者注:
数据被提高到哲学的高度,被赋予了世界本体的意义,成为一个独立的客观数据世界)
异常值检测(Outlier detection) –
异常值是指严重偏离一个数据集或一个数据组合总平均值的对象,该对象与数据集中的其他它相去甚远,因此,异常值的出现意味着系统发生问题,需要对此另加分析。
P
模式识别(Pattern Recognition) – 通过算法来识别数据中的模式,并对同一数据源中的新数据作出预测
P字节(PB: Petabytes) – 约等于1000 TB(terabytes), 约等于1百万 GB
(gigabytes)。欧洲核子研究中心(CERN)大型强子对撞机每秒产生的粒子个数就约为1 PB
平台即服务(PaaS: Platform-as-a-Service) – 为云计算解决方案提供所有必需的基础平台的一种服务
预测分析(Predictive analysis) –
大数据分析方法中最有价值的一种分析方法,这种方法有助于预测个人未来(近期)的行为,例如某人很可能会买某些商品,可能会访问某些网站,做某些事情或者产生某种行为。通过使用各种不同的数据集,例如历史数据,事务数据,社交数据,或者客户的个人信息数据,来识别风险和机遇
隐私(Privacy) – 把具有可识别出个人信息的数据与其他数据分离开,以确保用户隐私。
公共数据(Public data) – 由公共基金创建的公共信息或公共数据集。
Q
数字化自我(Quantified Self) – 使用应用程序跟踪用户一天的一举一动,从而更好地理解其相关的行为
查询(Query) – 查找某个问题答案的相关信息
R
再识别(Re-identification) – 将多个数据集合并在一起,从匿名化的数据中识别出个人信息
回归分析(Regression analysis) –
确定两个变量间的依赖关系。这种方法假设两个变量之间存在单向的因果关系(译者注:自变量,因变量,二者不可互换)
RFID – 射频识别; 这种识别技术使用一种无线非接触式射频电磁场传感器来传输数据
实时数据(Real-time data) – 指在几毫秒内被创建、处理、存储、分析并显示的数据
推荐引擎(Recommendation engine) – 推荐引擎算法根据用户之前的购买行为或其他购买行为向用户推荐某种产品
路径分析(Routing analysis) –
针对某种运输方法通过使用多种不同的变量分析从而找到一条最优路径,以达到降低燃料费用,提高效率的目的
S
半结构化数据(Semi-structured data) –
半结构化数据并不具有结构化数据严格的存储结构,但它可以使用标签或其他形式的标记方式以保证数据的层次结构
情感分析(Sentiment Analysis) – 通过算法分析出人们是如何看待某些话题
信号分析(Signal analysis) – 指通过度量随时间或空间变化的物理量来分析产品的性能。特别是使用传感器数据。
相似性搜索(Similarity searches) – 在数据库中查询最相似的对象,这里所说的数据对象可以是任意类型的数据
仿真分析(Simulation analysis) –
仿真是指模拟真实环境中进程或系统的 *** 作。仿真分析可以在仿真时考虑多种不同的变量,确保产品性能达到最优
智能网格(Smart grid) – 是指在能源网中使用传感器实时监控其运行状态,有助于提高效率
软件即服务(SaaS: Software-as-a-Service) – 基于Web的通过浏览器使用的一种应用软件
空间分析(Spatial analysis) – 空间分析法分析地理信息或拓扑信息这类空间数据,从中得出分布在地理空间中的数据的模式和规律
SQL – 在关系型数据库中,用于检索数据的一种编程语言
结构化数据(Structured data)
-可以组织成行列结构,可识别的数据。这类数据通常是一条记录,或者一个文件,或者是被正确标记过的数据中的某一个字段,并且可以被精确地定位到。
T
T字节(TB: Terabytes) – 约等于1000 GB(gigabytes)。1 TB容量可以存储约300小时的高清视频。
时序分析(Time series analysis) –
分析在重复测量时间里获得的定义良好的数据。分析的数据必须是良好定义的,并且要取自相同时间间隔的连续时间点。
拓扑数据分析(Topological Data Analysis) –
拓扑数据分析主要关注三点:复合数据模型、集群的识别、以及数据的统计学意义。
交易数据(Transactional data) – 随时间变化的动态数据
透明性(Transparency) – 消费者想要知道他们的数据有什么作用、被作何处理,而组织机构则把这些信息都透明化了。
U
非结构化数据(Un-structured data) – 非结构化数据一般被认为是大量纯文本数据,其中还可能包含日期,数字和实例。
V
价值(Value) – (译者注:大数据4V特点之一)
所有可用的数据,能为组织机构、社会、消费者创造出巨大的价值。这意味着各大企业及整个产业都将从大数据中获益。
可变性(Variability) – 也就是说,数据的含义总是在(快速)变化的。例如,一个词在相同的推文中可以有完全不同的意思。
多样(Variety) – (译者注:大数据4V特点之一)
数据总是以各种不同的形式呈现,如结构化数据,半结构化数据,非结构化数据,甚至还有复杂结构化数据
高速(Velocity) – (译者注:大数据4V特点之一) 在大数据时代,数据的创建、存储、分析、虚拟化都要求被高速处理。
真实性(Veracity) – 组织机构需要确保数据的真实性,才能保证数据分析的正确性。因此,真实性(Veracity)是指数据的正确性。
可视化(Visualization) –
只有正确的可视化,原始数据才可被投入使用。这里的“可视化”并非普通的图型或饼图,可视化指是的复杂的图表,图表中包含大量的数据信息,但可以被很容易地理解和阅读。
大量(Volume) – (译者注:大数据4V特点之一) 指数据量,范围从Megabytes至Brontobytes
W
天气数据(Weather data) – 是一种重要的开放公共数据来源,如果与其他数据来源合成在一起,可以为相关组织机构提供深入分析的依据
X
XML数据库(XML Databases) –
XML数据库是一种以XML格式存储数据的数据库。XML数据库通常与面向文档型数据库相关联,开发人员可以对XML数据库的数据进行查询,导出以及按指定的格式序列化
Y
Y字节 (Yottabytes) – 约等于1000 ZB (Zettabytes),
约等于250万亿张DVD的数据容量。现今,整个数字化宇宙的数据量为1 YB, 并且将每18年翻一番。
Z
Z字节 (ZB: Zettabytes) – 约等于1000 EB (Exabytes), 约等于1百万
TB。据预测,到2016年全球范围内每天网络上通过的信息大约能达到1 ZB。
附:存储容量单位换算表:
1 Bit(比特) = Binary Digit
8 Bits = 1 Byte(字节)
1,000 Bytes = 1 Kilobyte
1,000 Kilobytes = 1 Megabyte
1,000 Megabytes = 1 Gigabyte
1,000 Gigabytes = 1 Terabyte
1,000 Terabytes = 1 Petabyte
1,000 Petabytes = 1 Exabyte
1,000 Exabytes = 1 Zettabyte
1,000 Zettabytes = 1 Yottabyte
1,000 Yottabytes = 1 Brontobyte
1,000 Brontobytes = 1 Geopbyte

DolphinDB的社区版配置迎来了全新升级~
1 单节点内存从 4G 升级为 8G,满足更多场景的需求
2 许可证的有效期从6个月延长到20年,用户无需再定时更新license3
MongoDB和DolphinDB都是为大数据而生的数据库。但是两者有这较大的区别。前者是文档型的NoSQL数据库,可用于处理非结构化和结构化的数据,可以根据键值快速查找或写入一个文档。后者是列式存储的多模型数据库,主要用于结构化时序数据的高速存储、查询和分析。MongoDB有着自己最合适的应用场景。但是市场上缺少优秀的大数据产品,不少用户试图使用MongoDB来存储和查询物联网和金融领域的结构化时序数据。

MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库。

(1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的。

使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mysql等SQL数据库大大增强。

(2)易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。

(3)数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系。

(1)文档数据类型

SQL类型的数据库是正规化的,可以通过主键或者外键的约束保证数据的完整性与唯一性,所以SQL类型的数据库常用于对数据完整性较高的系统。MongoDB在这一方面是不如SQL类型的数据库,且MongoDB没有固定的Schema,正因为MongoDB少了一些这样的约束条件,可以让数据的存储数据结构更灵活,存储速度更加快。

(2)即时查询能力

MongoDB保留了关系型数据库即时查询的能力,保留了索引(底层是基于B tree)的能力。这一点汲取了关系型数据库的优点,相比于同类型的NoSQL redis 并没有上述的能力。

(3)复制能力

MongoDB自身提供了副本集能将数据分布在多台机器上实现冗余,目的是可以提供自动故障转移、扩展读能力。

(4)速度与持久性

MongoDB的驱动实现一个写入语义 fire and forget ,即通过驱动调用写入时,可以立即得到返回得到成功的结果(即使是报错),这样让写入的速度更加快,当然会有一定的不安全性,完全依赖网络。

MongoDB提供了Journaling日志的概念,实际上像mysql的bin-log日志,当需要插入的时候会先往日志里面写入记录,再完成实际的数据 *** 作,这样如果出现停电,进程突然中断的情况,可以保障数据不会错误,可以通过修复功能读取Journaling日志进行修复。

(5)数据扩展

MongoDB使用分片技术对数据进行扩展,MongoDB能自动分片、自动转移分片里面的数据块,让每一个服务器里面存储的数据都是一样大小。

MongoDB核心服务器主要是通过mongod程序启动的,而且在启动时不需对MongoDB使用的内存进行配置,因为其设计哲学是内存管理最好是交给 *** 作系统,缺少内存配置是MongoDB的设计亮点,另外,还可通过mongos路由服务器使用分片功能。

MongoDB的主要客户端是可以交互的js shell 通过mongo启动,使用js shell能使用js直接与MongoDB进行交流,像使用sql语句查询mysql数据一样使用js语法查询MongoDB的数据,另外还提供了各种语言的驱动包,方便各种语言的接入。

mongodump和mongorestore,备份和恢复数据库的标准工具。输出BSON格式,迁移数据库。

mongoexport和mongoimport,用来导入导出JSON、CSV和TSV数据,数据需要支持多格式时有用。mongoimport还能用与大数据集的初始导入,但是在导入前顺便还要注意一下,为了能充分利用好mongoDB通常需要对数据模型做一些调整。

mongosniff,网络嗅探工具,用来观察发送到数据库的 *** 作。基本就是把网络上传输的BSON转换为易于人们阅读的shell语句。

因此,可以总结得到,MongoDB结合键值存储和关系数据库的最好特性。因为简单,所以数据极快,而且相对容易伸缩还提供复杂查询机制的数据库。MongoDB需要跑在64位的服务器上面,且最好单独部署,因为是数据库,所以也需要对其进行热备、冷备处理。

因为本篇文章不是API手册,所有这里对shell的使用也是基础的介绍什么功能可以用什么语句,主要是为了展示使用MongoDB shell的方便性,如果需要知道具体的MongoDB shell语法可以查阅官方文档。

创建数据库并不是必须的 *** 作,数据库与集合只有在第一次插入文档时才会被创建,与对数据的动态处理方式是一致的。简化并加速开发过程,而且有利于动态分配命名空间。如果担心数据库或集合被意外创建,可以开启严格模式。

以上的命令只是简单实例,假设如果你之前没有学习过任何数据库语法,同时开始学sql查询语法和MongoDB 查询语法,你会发现哪一个更简单呢?如果你使用的是java驱动去 *** 作MongoDB,你会发现任何的查询都像Hibernate提供出来的查询方式一样,只要构建好一个查询条件对象,便能轻松查询(接下来会给出示例),博主之前熟悉ES6,所以入手MongoDB js shell完成没问题,也正因为这样简洁,完善的查询机制,深深的爱上了MongoDB。

使用java驱动链接MongoDB是一件非常简单的事情,简单的引用,简单的做增删改查。在使用完java驱动后我才发现spring 对MongoDB 的封装还不如官方自身提供出来的东西好用,下面简单的展示一下使用。

这里只举例了简单的链接与简单的MongoDB *** 作,可见其 *** 作的容易性。使用驱动时是基于TCP套接字与MongoDB进行通信的,如果查询结果较多,恰好无法全部放进第一服务器中,将会向服务器发送一个getmore指令获取下一批查询结果。

插入数据到服务器时间,不会等待服务器的响应,驱动会假设写入是成功的,实际是使用客户端生成对象id,但是该行为可以通过配置配置,可以通过安全模式开启,安全模式可以校验服务器端插入的错误。

要清楚了解MongoDB的基本数据单元。在关系型数据库中有带列和行的数据表。而MongoDB数据的基本单元是BSON文档,在键值中有指向不定类型值的键,MongoDB拥有即时查询,但不支持联结 *** 作,简单的键值存储只能根据单个键来获取值,不支持事务,但支持多种原子更新 *** 作。

如读写比是怎样的,需要何种查询,数据是如何更新的,会不会存在什么并发问题,数据结构化的程度是要求高还是低。系统本身的需求决定mysql还是MongoDB。

在关于schema 的设计中要注意一些原则,比如:

数据库是集合的逻辑与物理分组,MongoDB没有提供创建数据库的语法,只有在插入集合时,数据库才开始建立。创建数据库后会在磁盘分配一组数据文件,所有集合、索引和数据库的其他元数据都保存在这些文件中,查阅数据库使用磁盘状态可通过。

集合是结构上或概念上相似得文档的容器,集合的名称可以包含数字、字母或 符号,但必须以字母或数字开头,完全。

限定集合名不能超过128个字符,实际上 符号在集合中很有用,能提供某种虚拟命名空间,这是一种组织上的原则,和其他集合是一视同仁的。在集合中可以使用。

其次是键值,在MongoDB里面所有的字符串都是UTF-8类型。数字类型包括double、int、long。日期类型都是UTC格式,所以在MongoDB里面看到的时间会比北京时间慢8小时。整个文档大小会限制在16m以内,因为这样可以防止创建难看的数据类型,且小文档可以提升性能,批量插入文档理想数字范围是10~200,大小不能超过16MB。

(1)索引能显著减少获取文档的所需工作量,具体的对比可以通过 explain()方法进行对比

(2)解析查询时MongoDB通过最优计划选择一个索引进行查询,当没有最适合索引时,会先不同的使用各个索引进行查询,最终选出一个最优索引做查询

(3)如果有一个a-b的复合索引,那么仅针对a的索引是冗余的

(4)复合索引里的键的顺序是很重要的

(1)单键索引

(2)复合索引

(3)唯一性索引

(4)稀疏索引

如索引的字段会出现null的值,或是大量文档都不包含被索引的键。

如果数据集很大时,构建索引将会花费很长的时间,且会影响程序性能,可通过

当使用 mongorestore 时会重新构建索引。当曾经执行过大规模的删除时,可使用

对索引进行压缩,重建。

(1)查阅慢查询日志

(2)分析慢查询

注意新版本的MongoDB 的explain方法是需要参数的,不然只显示普通的信息。

本节同样主要简单呈现MongoDB副本集搭建的简易性,与副本集的强壮性,监控容易性

提供主从复制能力,热备能力,故障转移能力

实际上MongoDB对副本集的 *** 作跟mysql主从 *** 作是差不多的,先看一下mysql的主从数据流动过程

而MongoDB主要依赖的日志文件是oplog

写 *** 作先被记录下来,添加到主节点的oplog里。与此同时,所有从结点复制oplog。首先,查看自己oplog里最后一条的时间戳;其次,查询主节点oplog里所有大于此时间戳的条目;最后,把那些条目添加到自己的oplog里并应用到自己的库里。从节点使用长轮询立即应用来自主结点oplog的新条目。

当遇到以下情况,从节点会停止复制

local数据库保存了所有副本集元素据和oplog日志

可以使用以下命令查看复制情况

每个副本集成员每秒钟ping一次其他所有成员,可以通过rsstatus()看到节点上次的心跳检测时间戳和 健康 状况。

这个点没必要过多描述,但是有一个特殊场景,如果从节点和仲裁节点都被杀了,只剩下主节点,他会把自己降级成为从节点。

如果主节点的数据还没有写到从库,那么数据不能算提交,当该主节点变成从节点时,便会触发回滚,那些没写到从库的数据将会被删除,可以通过rollback子目录中的BSON文件恢复回滚的内容。

(1)使用单节点链接

只能链接到主节点,如果链接到从节点的话,会被拒绝写入 *** 作,但是如果没有使用安全模式,因为mongo的fire and forget 特性,会把拒绝写入的异常给吃掉。

(2)使用副本集方式链接

能根据写入的情况自动进行故障转移,但是当副本集进行新的选举时,还是会出现故障,如果不使用安全模式,依旧会出现写不进去,但现实成功的情况。

分片是数据库切分的一个概念实现,这里也是简单总结为什么要使用分片以及分片的原理, *** 作。

当数据量过大,索引和工作数据集占用的内存就会越来越多,所以需要通过分片负载来解决这个问题

(1)分片组件

(2)分片的核心 *** 作

分片一个集合:分片是根据一个属性的范围进行划分的,MongoDB使用所谓的分片键让每个文档在这些范围里找到自己的位置

块:是位于一个分片中的一段连续的分片键范围,可以理解为若干个块组成分片,分片组成MongoDB的全部数据

(3)拆分与迁移

块的拆分:初始化时只有一个块,达到最大块尺寸64MB或100000个文档就会触发块的拆分。把原来的范围一分为二,这样就有了两个块,每个块都有相同数量的文档。

迁移:当分片中的数据大小不一时会产生迁移的动作,比如分片A的数据比较多,会将分片A里面的一些块转移到分片B里面去。分片集群通过在分片中移动块来实现均衡,是由名为均衡器的软件进程管理的,任务是确保数据在各个分片中保持均匀分布,当集群中拥有块最多的分片与拥有块最少分片的块差大于8时,均衡器就会发起一次均衡处理。

启动两个副本集、三个配置服务器、一个mongos进程

配置分片

(1)分片查询类型

(2)索引

分片集合只允许在_id字段和分片键上添加唯一性索引,其他地方不行,因为这需要在分片间进行通信,实施起来很复杂。

当创建分片时,会根据分片键创建一个索引。

(1)分片键是不可修改的、分片键的选择非常重要

(2)低效的分片键

(3)理想的分片键

(1)部署拓扑

根据不同的数据中心划分

这里写描述

(2)最低要求

(3)配置的注意事项

需要估计集群大小,可使用以下命令对现有集合进行分片处理

(4)备份分片集群

备份分片时需要停止均衡器

(1)部署架构

使用64位机器、32位机器会制约mongodb的内存,使其最大值为15GB

(2)cpu

mongodb 只有当索引和工作集都可放入内存时,才会遇到CPU瓶颈,CPU在mongodb使用中的作用是用来检索数据,如果看到CPU使用饱和的情况,可以通过查询慢查询日志,排查是不是查询的问题导致的,如果是可以通过添加索引来解决问题

mongodb写入数据时会使用到CPU,但是mongodb写入时间一次只用到一个核,如果有频繁的写入行为,可以通过分片来解决这个问题

(3)内存

大内存是mongodb的保障,如果工作集大小超过内存,将会导致性能下降,因为这将会增加数据加载入内存的动作

(4)硬盘

mongodb默认每60s会与磁盘强制同步一次,称为后台刷新,会产生I/O *** 作。在重启时mongodb会将磁盘里面的数据加载至内存,高速磁盘将会减少同步的时间

(5)文件系统

使用ext4 和 xfs 文件系统

禁用最后访问时间

(6)文件描述符

linux 默认文件描述符是1024,需要大额度的提升这个额度

(7)时钟

mongodb各个节点服务器之间使用ntp服务器

(1)绑定IP

启动时使用 - -bind_ip 命令

(2)身份验证

启动时使用 - -auth 命令

(3)副本集身份认证

使用keyFile,注意keyFile文件的权限必须是600,不然会启动不起来

(1)拓扑结构

搭建副本集至少需要两个节点,其中仲裁结点不需要有自己的服务器

(2)Journaling日志

写数据时会先写入日志,而此时的数据也不是直接写入硬盘,而是写入内存

但是Journaling日志会消耗内存,所以可以在主库上面关闭,在从库上面启动

可以单独为Journaling日志使用一块固态硬盘

在插入时,可以通过驱动确保Journaling插入后再反馈,但是会非常影响性能。

logpath 选项指定日志存储地址

-vvvvv 选项(v越多,输出越详细)

dbrunCommand({logrotare:1}) 开启滚动日志

(1)serverStatus

这里写描述

(2)top

(3)dbcurrentOp()

动态展示mongodb活动数据

占用当前mongodb监听端口往上1000号的端口

(1)mongodump

把数据库内容导出成BSON文件,而mongorestore能读取并还原这些文件

(2)mongorestore

把导出的BSON文件还原到数据库

(3)备份原始数据文件

可以这么做,但是, *** 作之前需要进行锁库处理 dbrunCommand({fsync:1,lock:true})

db$cmdsysunlockfindOne() 请求解锁 *** 作,但是数据库不会立刻解锁,需要使用dbcurrentOp()验证。

(1)修复

mongd --repair 修复所有数据库

dbrunCommand({repairDatabase:1}) 修复单个数据库

修复就是根据Jourling文件读取和重写所有数据文件并重建各个索引

(2)压紧

压紧,会重写数据文件,并重建集合的全部索引,需要停机或者在从库上面运行,如果需要在主库上面运行,需要添加force参数 保证加写锁。

(1)监控磁盘状态

(2)为提升性能检查索引和查询

总的来说,扫描尽可能少的文档。

保证没有冗余的索引,冗余的索引会占用磁盘空间、消耗更多的内存,在每次写入时还需做更多工作

(3)添加内存

dataSize 数据大小 和 indexSize 索引大小,如果两者的和大于内存,那么将会影响性能。

storageSize超过dataSize 数据大小 两倍以上,就会因磁盘碎片而影响性能,需要压缩。

大数据或称巨量资料,指的是所涉及的资料量规模巨大到无法透过主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。
大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据。适用于大数据的技术,包括大规模并行处理(MPP)数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/13242861.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-25
下一篇 2023-06-25

发表评论

登录后才能评论

评论列表(0条)

保存