[Day 3] - 『转职工作的Lessons learned』 - 资料库转换

今天来分享一下转职後第一个工作任务:将资料从MongoDB转到PostgreSQL

2020年10月从Alpha Camp毕业後,面试了好几家公司,感谢一路以来的贵人相助,小弟有幸能加入现在的公司,接到的第一个工作任务就是将资料从非关联式资料库 - MongoDB转移到关连式资料库 - PostgreSQL。

首先大致介绍一下关联式资料库(No SQL)及非关联式资料库(SQL)的差别。

===NoSQL===

非关连式资料库特点:

  1. NoSQL意思是"Not Only SQL",也就是不限定为「关联式资料库」的资料库管理系统的统称。
  2. 不支持SQL语法与SQL的逻辑,资料库通常不使用关联模型,也并不需要固定的结构(schema-free)。
  3. 文件资料库(document database),NoSQL资料库的一种,把资料存放成「文件 (documents)」,存成JSON格式,而资料由「属性-值」(attribute-vaule pair)或阵列组成。
  4. 不讲求资料同步,只求最後结果一致。

===SQL===

关联式资料库有特点:

  1. 资料用一个或是多个资料表(table)存放。
  2. 资料间有关联。
  3. 以SQL(Structured Query Language 结构化查询语言)操作。

以上介绍摘录至SQL/NoSQL是什麽?认识资料库管理系统DBMS

PostgreSQL是工作後才接触到的关联式资料库,与之前学过MySQL,两者操作操作起来满类似的,所以在转移资料库的过程中还算顺利,主要业务就是要将Mongo里面有的表格、栏位、属性建立在Postgres,遇到比较特别的事是Mongodb有一个独有的栏位 _id,资料型别:ObjectId,但PostgreSQL没有这个型别。

简单介绍一下ObjectId:

ObjectId 长度为 12 位元组,由几个 2-4 位元组的链结组成。每个链结代表并指定文件身份的具体内容。以下的值构成了完整的 12 位元组组合:
一个 4 位元组的值,表示自 Unix 纪元以来的秒数
一个 3 位元组的机器识别元
一个 2 位元组的程序 ID
一个 3 位元组的计数器,以随机值开始

以上摘录至Navicat 部落格

在转换资料库的过程中,需要写入自己独特的ObjectId,但碍於PostgreSQL没有这个型别,解决方式是将这个栏位以varchar的方式储存,後续新增资料时,import objectId from "objectid",就可以每次都新产一组objectId。

大家可能会有疑问,为什麽不在转换资料库时就直接舍弃这个ObjectId资料型别,原因其实是当时专案设计之初,就是以objectId去调用资料库的资料,所以为了减少变更资料库的疼痛感,就先以这种方式去处理。对自己来说是个不错的经验!


<<:  Fluentd Bit

>>:  DAY17 - [JS] 扩充功能 - 倒数计时,番茄钟

Day 5 - 透过 RKE 架设第一套 Rancher(下)

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...

【Day 9】Replica 之间的一致性

7.3 eventual consistency 还没写QQ 这章会来聊聊 consistency...

#18-手写字特效炫起来!(SVG dasharray & dashoffset)

第3天写了打字特效炫起来! 今天来个姊妹篇,手写字特效炫起来! 已经默默进入SVG几天了... 老样...

【Vue】params vs. query | Vue Router

params - 命名的路由,加上参数让路由建立 url 动态的参数前要加上冒号 ":&q...

【D25】 说明一下bid and ask

前言 说明一下bid and ask是什麽,我们这边可以怎麽使用呢? 参考网站:[Bid and A...