写点什么

ARTS 05 - 使用 Ecto.Migration 来做数据库迁移

用户头像
jerry.mei
关注
发布于: 2020 年 07 月 19 日
ARTS 05 - 使用 Ecto.Migration 来做数据库迁移

ARTS左耳朵耗子提出来的一个打卡任务。每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西!我希望这个事可以给大家得到相应的算法、代码、技术和影响力的训练。


这是我的第五周打卡。这周使用新的语言 Elixir 开始在项目中慢慢实践了起来,期间发现由于语言跟整个生态的不熟悉,开发经常受阻。但同时,在实践中有目的性的去学习,整个学习的速度会快很多。


Algorithm


删除链表中的节点


描述:



题解:


之前写过链表的节点删除,不过是传入 index 值。这道题与众不同的地方是传入的就是删除的节点,而且函数不能返回任何结果。所以一开始比较难以理解的就是参数中为什么没有 head。


理解题意后,发现这道题想表述的是在只给定被删除节点的情况下,删除该节点。而且题目中强调了给定的节点为非末尾节点并且一定是链表中的一个有效节点。


那么有意思的地方就来了。我们只需要将当前被删除的节点变成它的下一个节点,就间接地实现了删除该节点的功能。


ES6


const deleteNode = (node) => {    node.val = node.next.val    node.next = node.next.next};
复制代码


时间复杂度:O(1)

空间复杂度:O(1)

Review


Preparing for a Tech Talk, Part 1: Motivation


这篇文章是一个关于准备技术演讲系列教程的开篇,主要讲的是技术演讲的动机。


关于动机,作者分为外部动机和内部动机来分别说明。外部动机大家都比较清楚,可以获取业内更多认可以便找到更好的工作或加薪等等。内部动机的话对于每个人来说也许都不尽相同。对于作者的话,他总结了两点:


  • 喜欢分享自己的想法

  • 喜欢以更简单的方式重新解释事物


选择一个与自己动机相符的演讲会对我们有很多帮助:


  1. 选择一个主题比较容易

  2. 在讲台上不那么恐怖

  3. 更令人信服


Tip


使用 Ecto.Migration 来做数据库迁移


数据库迁移语句在很多后端的框架中基本都有实现。它的好处是实现了数据库的版本控制,可以让团队更容易修改和共享数据库结构。这周主要体验了一下Ecto.Migration在实际生产中的用法。


使用 mix ecto.gen.migration xxx 可以生成一个数据库迁移文件,它是以当前创建时间作为前缀来命名的,比如:priv/repo/migrations/20190417140000_add_weather_table.exs


在数据库迁移文件中,主要用到的两个函数是 updownup 语句负责向前迁移数据库,down 负责回滚操作。所以 down 里面的内容必须保持跟 up 是完全相反的。比如:


defmodule MyRepo.Migrations.AddWeatherTable do  use Ecto.Migration
def up do create table("weather") do add :city, :string, size: 40 add :temp_lo, :integer add :temp_hi, :integer add :prcp, :float
timestamps() end end
def down do drop table("weather") endend
复制代码


up 语句里创建了一个 weather 表,那么 down 里面需要做的就是删除该表。通常对于建表语句框架知道回滚操作就是 drop table ,所以对于建表语句的话我们只需要实现一个 change 方法即可


defmodule MyRepo.Migrations.AddWeatherTable do  use Ecto.Migration
def change do create table("weather") do add :city, :string, size: 40 add :temp_lo, :integer add :temp_hi, :integer add :prcp, :float
timestamps() end endend
复制代码


当数据库迁移语句写好后,我们执行下面的操作就可以执行迁移和回滚操作了


$ mix ecto.migrate   数据库迁移$ mix ecto.rollback  回滚
复制代码


Share


国内版的《硅谷之火》


这是在语雀里发掘的一个很好的专栏,里面分享了国内关于互联网创业的点点滴滴,很值得每个互联网人去阅读。

发布于: 2020 年 07 月 19 日阅读数: 74
用户头像

jerry.mei

关注

Coding is ARTS 2019.01.03 加入

全栈工程师,技术作者,关注大前端、web全链路研发等领域 个人网站:http://www.jerrymei.cn

评论

发布
暂无评论
ARTS 05 - 使用 Ecto.Migration 来做数据库迁移