我觉得问题很简单,但我很惊讶,根本找不到任何文件或信息。我只想获得或计算单个couchbase数据库的字节大小。
例如,我有一个数据库,可以存储经销商处的所有汽车信息。数据库中有多个文档。我想弄清楚如何计算数据库的非压缩总大小。这包括数据库中的所有内容(附件,文本,所有内容)
理想情况下,使用Swift 3.0。但是,如果有人知道如何使用任何语言获取数据库大小,我可以快速移植语言。
func openDatabase() -> CBLDatabase
{
var db : CBLDatabase?
let db_name = "dealership"
let options = CBLDatabaseOptions()
options.create = true
do
{
// This will create a database if one does not exist. Otherwise, it will open it.
try db = CBLManager.sharedInstance().openDatabaseNamed(db_name, with: options)
// I would love if this was a thing! Since it is not, I would like to write a function to get the database size.
let db_size = db.getSize() // <-- This is my question. How to compute the database size.
}
catch let error as NSError
{
NSLog("Some error %@", error)
}
return db
}
/** Gets the size of the database in MB */
func getSize() -> Int
{
// What goes here?
}
答案 0 :(得分:0)
Couchbase Lite数据库存储为文件系统中的目录,因此您只需添加目录中文件的大小即可。 (递归地,虽然在实践中只有两个级别的文件。)
没有数据库目录的直接访问者,但您可以从CBLManager的目录(使用其directory
属性)开始,然后使用{{追加数据库的名称1}}文件扩展名。
PS:如果您指定&#34; Couchbase 精简版&#34;,则可以更轻松地识别您的问题。只是说&#34; Couchbase&#34;给出了您对旗舰服务器数据库的询问。
答案 1 :(得分:0)
我希望由couchbase提供更高级别的功能来获取数据库大小。但是,这不存在,你必须做文件io。修改How To Get Directory Size With Swift On OS X的解决方案,我创建了下面的函数(Swift 3.0)。
func getDatabaseSize(_ db_name : String) -> UInt64
{
// Build the couchbase database url
let url_str = CBLManager.sharedInstance().directory + "/" + db_name + ".cblite2"
let url = NSURL(fileURLWithPath: url_str) as URL
var size = 0
var is_dir: ObjCBool = false
// Verify that the file exist and is a directory
if (FileManager.default.fileExists(atPath: url.path, isDirectory: &is_dir) && is_dir.boolValue)
{
FileManager.default.enumerator(at: url, includingPropertiesForKeys: [.fileSizeKey], options: [])?.forEach
{
size += (try? ($0 as? URL)?.resourceValues(forKeys: [.fileSizeKey]))??.fileSize ?? 0
}
}
return UInt64(size)
}