简单的申请人列表webapp
Simple list of applicants webapp
我正在创建一个 Web 应用程序,其中列出申请人及其在等候名单上的位置。
我们需要能够将新申请人添加到此列表中并从列表中删除申请人。列表中将有不到 10k 的申请人。
规格:
我打算用 Golang 编写应用程序。
列表需要安全,我程序关闭了,应该是可以恢复的。
该应用应包含每位申请人的以下数据:姓名、学号、职位。
问题:
- 我如何保护列表(锁定?),以便在同时对其进行两次更新时对两者进行正确更新?
- 我应该将数据保存在数据库中还是使用文件?
我需要你的帮助!
更新:
模型代码:
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
请求
- 你可以分开考虑数据架构和代码逻辑
我正在创建一个 Web 应用程序,其中列出申请人及其在等候名单上的位置。
我们需要能够将新申请人添加到此列表中并从列表中删除申请人。列表中将有不到 10k 的申请人。
规格:
我打算用 Golang 编写应用程序。
列表需要安全,我程序关闭了,应该是可以恢复的。
该应用应包含每位申请人的以下数据:姓名、学号、职位。
问题:
- 我如何保护列表(锁定?),以便在同时对其进行两次更新时对两者进行正确更新?
- 我应该将数据保存在数据库中还是使用文件?
我需要你的帮助!
更新:
模型代码:
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 请求
- 你可以分开考虑数据架构和代码逻辑