当前位置: 首页 > news >正文

成都制作网站软件临沂seo公司

成都制作网站软件,临沂seo公司,工信部网站备案,wordpress 软件主题因为sqlite是基于文件的,所以默认情况下,sqlite是不支持并发读写的,即写操作会阻塞其他操作,同时sqlite也很容易就产生死锁。 但是作为一个使用广泛的离线数据库,从sqlite3.7.0版本开始(SQLite Release 3.…

因为sqlite是基于文件的,所以默认情况下,sqlite是不支持并发读写的,即写操作会阻塞其他操作,同时sqlite也很容易就产生死锁。

但是作为一个使用广泛的离线数据库,从sqlite3.7.0版本开始(SQLite Release 3.7.0 On 2010-07-21),sqlite引入了更常见的WAL机制来解决页面的读写并发问题。但是sqlite的实现特点决定了其并发能力较低。

SELECT sqlite_version();
3.8.8

开启了WAL模式之后,sqlite就会生成三个文件test.db, test.db-shm, test.db-wal。在WAL模式下支持一写多读。

当临时文件的内容达到一定的量,sqlite会进行一次落盘。

PRAGMA wal_autocheckpoint=5000;

pagesize默认设置的是4k,autocheckpoint设置5000,表示5000个page的数据量,会进行一下checkpoint,也就是20M。

查询日志模式:PRAGMA journal_mode;

设置日志模式:PRAGMA journal_mode=WAL;

示例
CREATE TABLE "users" (
"id"  INTEGER,
"name"  TEXT,
"age"  INTEGER,
"created_at"  TEXT,
"updated_at"  TEXT
);

使用Go的gorm来操作sqlite3

package go_sqliteimport ("fmt""strconv""sync""time""database/sql""gorm.io/driver/sqlite""gorm.io/gorm"
)var dbfile = "demos/go_sqlite/test.db"func Run() {gormDB, sqlDB, err := InitDB()if err != nil {panic(err)}defer sqlDB.Close()users := []User{}for i := 0; i < 1000; i++ {user := User{Name:      "user_" + strconv.Itoa(i),Age:       uint8(i % 100),CreatedAt: time.Now().Unix(),UpdatedAt: time.Now().Unix(),}users = append(users, user)}err = BatchInsertUsers(gormDB, users)if err != nil {panic(err)}users, err = GetUsers(gormDB)if err != nil {panic(err)}fmt.Println(len(users))fmt.Println(users[0])
}type User struct {ID        uintName      stringAge       uint8CreatedAt int64UpdatedAt int64
}func InitDB() (*gorm.DB, *sql.DB, error) {gormDB, err := gorm.Open(sqlite.Open(dbfile), &gorm.Config{})if err != nil {return nil, nil, err}sqlDB, _ := gormDB.DB()gormDB.Exec("PRAGMA journal_mode=WAL;")sqlDB.SetMaxIdleConns(10)sqlDB.SetMaxOpenConns(100)sqlDB.SetConnMaxLifetime(time.Hour)return gormDB, sqlDB, nil
}func BatchInsertUsers(gormDB *gorm.DB, users []User) error {batchSize := 100batchCount := (len(users) + batchSize - 1) / batchSizefor i := 0; i < batchCount; i++ {start := i * batchSizeend := (i + 1) * batchSizeif end > len(users) {end = len(users)}batch := users[start:end]tx := gormDB.Begin()if err := tx.Error; err != nil {return err}if err := tx.Create(&batch).Error; err != nil {tx.Rollback()return err}if err := tx.Commit().Error; err != nil {return err}}return nil
}func GetUsers(gormDB *gorm.DB) ([]User, error) {var users []Usererr := gormDB.Find(&users).Errorif err != nil {return nil, err}return users, nil
}

并发测试

var wg sync.WaitGroupfunc Run2() {gormDB, err := gorm.Open(sqlite.Open(dbfile), &gorm.Config{})if err != nil {panic("failed to connect database")}gormDB.Exec("PRAGMA journal_mode=WAL;")sqlDB, _ := gormDB.DB()sqlDB.SetMaxIdleConns(10)sqlDB.SetMaxOpenConns(100)wg.Add(2000)// 并发写入 1000 条数据for i := 0; i < 1000; i++ {go func(i int) {defer wg.Done()err := gormDB.Transaction(func(tx *gorm.DB) error {user := User{Name: fmt.Sprintf("user_%d", i)}result := tx.Create(&user)return result.Error})if err != nil {fmt.Printf("failed to write data: %v\n", err)}}(i)}// 并发读取数据for i := 0; i < 1000; i++ {go func() {defer wg.Done()var users []Usererr := gormDB.Transaction(func(tx *gorm.DB) error {result := tx.Find(&users)return result.Error})if err != nil {fmt.Printf("failed to read data: %v\n", err)} else {fmt.Printf("read %d records\n", len(users))}}()}wg.Wait()fmt.Println("done")
}
参考

https://mp.weixin.qq.com/s/9Y1EfzM5cups9oklByAW5Q

https://mp.weixin.qq.com/s/4AhMBJaZ4NZqfqcoPduXjg

http://www.yayakq.cn/news/347693/

相关文章:

  • 网站有后台更新不了东道设计应届生收入
  • 平台网站开发简报青岛建站开发
  • 杭州网站程序开发公司宿迁房产网 新楼盘
  • 做网站过程用文件做网站公司赚不赚钱
  • 网站的空间和域名是啥网络平台运营管理
  • 网站seo搜索引擎优化案例网站广告轮播代码
  • 自己做简单网站价格工信部网站备案信息查询
  • 茶文化网站建设的可行性分析表白网站源码大全
  • 网站优化seo培训中餐网站模板
  • 免费文案素材网站网站模板含数据库下载
  • 备案 网站名称 怎么改打好代码怎么做网站
  • 长春建站方案代引流推广公司
  • 上海网站设计案例苏州百度推广排名
  • 外包加工网下载优化营商环境调度
  • 我的网站突然找不到网页了平面设计培训班学费
  • 网站设计 佛山西安网站设计与建设
  • 华容网站建设企业官网小程序源码
  • 潍坊网站开发培训专业模板建站哪家好
  • wordpress自定义参数珠海网站seo
  • 用地方别名做网站名wordpress主题模板下载失败
  • 网站点击率原因西安做网站的公司在哪
  • 长春网站制作都找源晟27湖州网站建设有哪些
  • 行业 网站 方案市局网站建设建议
  • 添加网站图标wordpress高级搜索
  • html网站架设微信营销微网站建设
  • 网站推广效果的评价搜索引擎和门户网站的区别
  • wordpress建立php站点地图革吉网站建设
  • joomla网站建设电商运营自学网站
  • 网站 建设设计网站内链怎么做更好
  • 网站做影集安全吗固原网络营销网络推广方案