成人免费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用戶

2025-06-30 01:45:00

Netty輪詢HTTP 協議

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構建方式構建系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 懂色一区二区三区免费观看 | 久久久久久国产精品久久 | 国产成人精品一区二区三区四区 | 国产精品视频久久久久 | 免费av一区二区三区 | 久久精品免费 | 91传媒在线观看 | 欧美一区二区在线播放 | 欧美日韩国产一区 | 凹凸日日摸日日碰夜夜 | 国产成人免费 | 国产精品综合色区在线观看 | 男女国产视频 | 成人av一区二区亚洲精 | 亚洲乱码国产乱码精品精的特点 | 国产精品亚洲精品 | 91麻豆精品国产91久久久久久久久 | 国产成人精品综合 | 国产精品18久久久 | 中文字幕在线一区二区三区 | 国产999在线观看 | 日韩伦理一区二区 | 亚洲一区二区三区在线观看免费 | 国产999精品久久久久久 | 久草青青草 | 99国产精品久久久 | 91视频国产一区 | 在线国产一区二区 | 成人免费视频 | 99精品一区二区 | 成人国产精品免费观看视频 | 中文字幕在线观看国产 | 久久久久久国产精品免费 | 欧美激情a∨在线视频播放 成人免费共享视频 | 欧美日韩国产精品一区二区 | 91精品国产乱码久久久久久 | 午夜精品在线观看 | 欧美激情一区 | 日韩成人在线播放 | 国产女人第一次做爰毛片 | 操网站 |