简单的申请人webapp列表

时间:2016-02-15 12:16:07

标签: web-services web go architecture

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

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

具体细节:

  • 我计划在Golang中编写应用程序。

  • 列表需要安全,程序关闭,应该可以恢复。

  • 应用程序应包含每个申请人的此数据:姓名,学生ID,职位。

问题:

  1. 如何保护列表(锁定?),以便在两次同时进行更新时正确更新?
  2. 我应该将数据保存在数据库中还是使用文件?
  3. 我需要你的帮助!

    更新

    样机代码:

    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()
    }
    

2 个答案:

答案 0 :(得分:0)

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

否则数据库就可以了。例如BoltDB可能是合适的。这是纯粹的,并与你的程序一起运行。

答案 1 :(得分:0)

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

  • 您可以使用第三方商店获取数据,并在需要时轻松迁移
  • 您可以从第三方应用程序或纯SQL访问您的数据 请求
  • 您可以单独考虑数据架构和代码逻辑