成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

構建一個即時消息應用(一):模式

開發 后端
這是一系列關于構建“即時消息”應用的新帖子。你應該對這類應用并不陌生。有了它們的幫助,我們才可以與朋友暢聊無忌。我們將會用 CockroachDB 作為 SQL 數據庫,用 Go 作為后端語言,并且用 JavaScript 來制作 web 應用。

[[278212]]

這是一系列關于構建“即時消息”應用的新帖子。你應該對這類應用并不陌生。有了它們的幫助,我們才可以與朋友暢聊無忌。Facebook MessengerWhatsAppSkype 就是其中的幾個例子。正如你所看到的那樣,這些應用允許我們發送圖片、傳輸視頻、錄制音頻、以及和一大幫子人聊天等等。當然,我們的教程應用將會盡量保持簡單,只在兩個用戶之間發送文本消息。

我們將會用 CockroachDB 作為 SQL 數據庫,用 Go 作為后端語言,并且用 JavaScript 來制作 web 應用。

這是頭篇帖子,我們將會講述數據庫的設計。

  1. CREATE TABLE users (
  2. id SERIAL NOT NULL PRIMARY KEY,
  3. username STRING NOT NULL UNIQUE,
  4. avatar_url STRING,
  5. github_id INT NOT NULL UNIQUE
  6. );

顯然,這個應用需要一些用戶。我們這里采用社交登錄的形式。由于我選用了 GitHub,所以這里需要保存一個對 GitHub 用戶 ID 的引用。

  1. CREATE TABLE conversations (
  2. id SERIAL NOT NULL PRIMARY KEY,
  3. last_message_id INT,
  4. INDEX (last_message_id DESC)
  5. );

每個對話都會引用最近一條消息。每當我們輸入一條新消息時,我們都會更新這個字段。我會在后面添加外鍵約束。

… 你可能會想,我們可以先對對話進行分組,然后再通過這樣的方式獲取最近一條消息。但這樣做會使查詢變得更加復雜。

  1. CREATE TABLE participants (
  2. user_id INT NOT NULL REFERENCES users ON DELETE CASCADE,
  3. conversation_id INT NOT NULL REFERENCES conversations ON DELETE CASCADE,
  4. messages_read_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  5. PRIMARY KEY (user_id, conversation_id)
  6. );

盡管之前我提到過對話只會在兩個用戶之間進行,但我們還是采用了允許向對話中添加多個參與者的設計。因此,在對話和用戶之間有一個參與者表。

為了知道用戶是否有未讀消息,我們在消息表中添加了“讀取時間”(messages_read_at)字段。每當用戶在對話中讀取消息時,我們都會更新它的值,這樣一來,我們就可以將它與對話中末尾一條消息的“創建時間”(created_at)字段進行比較。

  1. CREATE TABLE messages (
  2. id SERIAL NOT NULL PRIMARY KEY,
  3. content STRING NOT NULL,
  4. user_id INT NOT NULL REFERENCES users ON DELETE CASCADE,
  5. conversation_id INT NOT NULL REFERENCES conversations ON DELETE CASCADE,
  6. created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  7. INDEX(created_at DESC)
  8. );

盡管我們將消息表放在末尾,但它在應用中相當重要。我們用它來保存對創建它的用戶以及它所出現的對話的引用。而且還可以根據“創建時間”(created_at)來創建索引以完成對消息的排序。

  1. ALTER TABLE conversations
  2. ADD CONSTRAINT fk_last_message_id_ref_messages
  3. FOREIGN KEY (last_message_id) REFERENCES messages ON DELETE SET NULL;

我在前面已經提到過這個外鍵約束了,不是嗎:D

有這四張表就足夠了。你也可以將這些查詢保存到一個文件中,并將其通過管道傳送到 Cockroach CLI。

首先,我們需要啟動一個新節點:

  1. cockroach start --insecure --host 127.0.0.1

然后創建數據庫和這些表:

  1. cockroach sql --insecure -e "CREATE DATABASE messenger"
  2. cat schema.sql | cockroach sql --insecure -d messenger

這篇帖子就到這里。 

 

責任編輯:龐桂玉 來源: Linux公社
相關推薦

2020-10-09 12:45:19

創建消息即時消息編程語言

2020-10-09 15:00:56

實時消息編程語言

2019-10-28 20:12:40

OAuthGuard中間件編程語言

2020-03-31 12:21:20

JSON即時消息編程語言

2020-10-12 09:20:13

即時消息Access頁面編程語言

2020-10-19 16:20:38

即時消息Conversatio編程語言

2020-10-16 14:40:20

即時消息Home頁面編程語言

2020-10-10 20:51:10

即時消息編程語言

2021-03-25 08:29:33

SpringBootWebSocket即時消息

2023-08-14 08:01:12

websocket8g用戶

2015-03-18 15:37:19

社交APP場景

2014-10-15 11:01:02

Web應用測試應用

2018-08-22 17:32:45

2022-02-10 07:03:32

流量應用架構數據交換

2021-07-14 17:39:46

ReactRails API前端組件

2023-09-21 08:00:00

ChatGPT編程工具

2023-09-15 10:10:05

R 語言

2011-10-19 09:30:23

jQuery

2020-11-09 06:38:00

ninja構建方式構建系統

2010-01-08 12:14:44

ibmdwAndroid
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲视频二区 | 久久99精品视频 | 国产精品欧美精品 | 国产精品久久二区 | 欧美成人第一页 | 国产a视频 | av大片在线观看 | 色天天综合 | av网站免费 | 欧美自拍日韩 | 91精品久久久久久久久 | 婷婷丁香激情 | 91视频国产区 | 大久| 欧美美女爱爱 | 岛国毛片在线观看 | 国产午夜精品一区二区三区嫩草 | 成人免费看黄 | 欧美精品一级 | 精精国产xxxx视频在线播放 | 一区二区三区欧美在线观看 | 精品九九| 中文字幕亚洲一区 | 欧美一区二区三区在线看 | 91精品国产色综合久久 | 天天操天天玩 | 特黄一级| 久久小视频 | 亚洲成人一区 | 91丨九色丨国产在线 | 久久久女女女女999久久 | 亚洲三区在线观看 | av网站免费看 | 亚洲一区二区三区久久久 | 欧美日韩一区二区三区四区 | 亚洲一区二区三区免费在线观看 | 亚洲免费人成在线视频观看 | 久久午夜精品福利一区二区 | 国产农村妇女精品一区 | 免费能直接在线观看黄的视频 | 久久久国产精品视频 |