简单的申请人列表webapp

Simple list of applicants webapp

我正在创建一个 Web 应用程序,其中列出申请人及其在等候名单上的位置。

我们需要能够将新申请人添加到此列表中并从列表中删除申请人。列表中将有不到 10k 的申请人。

规格:

问题:

  1. 我如何保护列表(锁定?),以便在同时对其进行两次更新时对两者进行正确更新?
  2. 我应该将数据保存在数据库中还是使用文件?

我需要你的帮助!

更新:

模型代码:

package main

import (
    "log"
    "sync"
    "time"

    "github.com/boltdb/bolt"
)

type applicant struct {
    FirstName string
    LastName  string
    StudentID string
    Position  int
}

type priorityList struct {
    sync.Mutex
    applicants []applicant
}

func (l *priorityList) newApplicant(fn string, ln string, sid string) error {

    // add applicant to priorityList
    return nil
}

func (l *priorityList) removeApplicant(sid string) error {
    // remove applicant from priorityList
    return nil
}

func (l *priorityList) editApplicant(sid string) error {
    // edit applicant in priorityList
    return nil
}

func main() {
    // Database
    db, err := bolt.Open("priorityList.db", 0600, &bolt.Options{Timeout: 1 * time.Second})
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
}

如果您使用文件,您可以使用 Mutex 来阻止并发写入。

要不然数据库就好了。例如 BoltDB 可能是合适的。它是纯粹的 go 并与您的程序一起运行。

方法有很多种。您可以使用文件并使用 Go 互斥锁或系统锁来保护它。您可以内存映射文件以提高性能。您可以使用 BoltDB,它是一种很好的软件和平,并提供所需的机器并且可以在进程中工作。如果你写的很少而且大部分都是读的,那么常量 DB https://github.com/colinmarc/cdb 看起来也很有趣。 但是,经典 SQL 数据库有一些优点

  • 您可以使用第三方商店存储数据并在需要时轻松迁移
  • 您可以从第三方应用或直接访问您的数据 SQL 请求
  • 你可以分开考虑数据架构和代码逻辑