如何获得couchbase数据库的大小

时间:2017-01-22 05:19:06

标签: swift database size couchbase

我觉得问题很简单,但我很惊讶,根本找不到任何文件或信息。我只想获得或计算单个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?

   }

2 个答案:

答案 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)
}