func (st StorageS3) Download(saveDirPath string) *switchDB { //save into temp file os.MkdirAll(saveDirPath, 0700) dirname := uuid.NewUUID().String() dirpath := path.Join(saveDirPath, dirname) tarpath := dirpath + ".tar" err := st.client.DownloadObject(st.Bucket, st.Path, tarpath) if err != nil { glog.Warning("download ", st.Path, " has failed") return nil } // unfolding err = unfoldTar(tarpath, dirpath) if err != nil { glog.Info("unforlding ", st.Path, " has failed") return nil } os.RemoveAll(tarpath) db, err := leveldb.OpenFile(dirpath, nil) if err != nil { glog.Info("opening ", st.Path, " has failed") return nil } glog.Info("download ", st.Path, " done") return &switchDB{db, dirpath} }
func BenchmarkRead10000CachedData(b *testing.B) { os.MkdirAll(testdbpath, 0700) dirname := uuid.NewUUID().String() dbpath := path.Join(testdbpath, dirname) makeDB(dbpath, 10000) db, _ := leveldb.OpenFile(dbpath, nil) conf := LevelDBConf{"test", testdbpath, nil, nil} ldb := NewLevelDBWithDB(db, dbpath, conf) go ldb.run() defer func() { ldb.Close() }() for i := 1; i <= 10000; i++ { key := fmt.Sprintf("testdata:%d", i) ldb.Get(key, UnmarshalTestStruct) } b.ResetTimer() for i := 1; i <= 10000; i++ { key := fmt.Sprintf("testdata:%d", i) ldb.Get(key, UnmarshalTestStruct) } }