ประเภทการดำเนินการฐานข้อมูล Firebase Realtime

คำสั่งตัวสร้างโปรไฟล์ฐานข้อมูล Firebase Realtime

หากต้องการสร้างรายงานความเร็วและการใช้แบนด์วิธสำหรับการดำเนินการในอินสแตนซ์ Realtime Database ของคุณ ให้ใช้คำสั่งต่อไปนี้:

firebase database:profile
ตัวเลือกการตั้งค่าสถานะ คำอธิบาย
-h, --help ข้อมูลการใช้งานเอาท์พุต
-o, --output FILENAME บันทึกผลลัพธ์ไปยังไฟล์ที่ระบุ
-i, --input FILENAME สร้างรายงานตามไฟล์ที่ระบุแทนบันทึกสตรีมจากเซิร์ฟเวอร์
-d, --duration SECONDS รวบรวมข้อมูลการใช้งานฐานข้อมูลตามจำนวนวินาทีที่ระบุ
--raw ส่งออกสถิติดิบที่รวบรวมเป็น JSON ที่คั่นด้วยบรรทัดใหม่

ประเภทการดำเนินงาน

เชื่อมต่อพร้อมกัน

การดำเนินการนี้สะท้อนถึงการเชื่อมต่อแบบเรียลไทม์กับฐานข้อมูล (เช่น เมื่อไคลเอ็นต์ใหม่เชื่อมต่อผ่าน SDK) การเชื่อมต่อ RESTful จะไม่สะท้อนให้เห็นในการดำเนินการเชื่อมต่อพร้อมกัน

{
    "name": "concurrent-connect",
    "timestamp": 1484776334900
}

พร้อมกัน-ตัดการเชื่อมต่อ

การตัดการเชื่อมต่อที่เกิดขึ้นพร้อมกันสะท้อนถึงการเชื่อมต่อที่ถูกตัดการเชื่อมต่อจากฐานข้อมูล (ตัวอย่างเช่น เมื่อไคลเอนต์ตัดการเชื่อมต่อหรือออกจากระบบ)

{
    "name": "concurrent-disconnect",
    "timestamp": 1484776341844
}

เรียลไทม์-เขียน

เขียนคำขอจากการเชื่อมต่อแบบเรียลไทม์ ตัวอย่างเช่น การดำเนินการ set() และ push() สำหรับเว็บไคลเอ็นต์ คำขอลบยังนับเป็นการดำเนินการ realtime-write และสะท้อนถึงการเขียนขนาด 0 ไบต์

{
    "allowed": true, // If security rules allow the operation
    "bytes": 1,
    "millis": 2,
    "name": "realtime-write",
    "path": [
        "foo"
    ],
    "timestamp": 1484776538763
}

การทำธุรกรรมแบบเรียลไทม์

ประเภทการดำเนินการนี้รวมถึงธุรกรรมที่ดำเนินการผ่านการเชื่อมต่อแบบเรียลไทม์ การทำธุรกรรมซ้ำอาจเป็นผลมาจากการพยายามที่ล้มเหลวและลองใหม่

{
    "allowed": true,
    "bytes": 20,
    "millis": 2,
    "name": "realtime-transaction",
    "path": [
        "foo"
    ],
    "timestamp": 1484776854610
}

อัปเดตแบบเรียลไทม์

การดำเนินการแบบเรียลไทม์สำหรับการอัปเดตเหล่านี้สะท้อนถึงการโอเวอร์ไวต์ของข้อมูลเฉพาะ ไม่ใช่การดำเนินการเขียนทั่วไปใน realtime-write

{
    "allowed": true,
    "bytes": 5,
    "millis": 2,
    "name": "realtime-update",
    "path": [
        "foo"
    ],
    "timestamp": 1484776538769
}

ผู้ฟัง-ฟัง

การดำเนินการเหล่านี้สะท้อนถึงการขอข้อมูลเบื้องต้น ณ ตำแหน่งเฉพาะจากลูกค้า ตัวอย่างเช่น วิธีการ on() หรือ once() สำหรับเว็บไคลเอ็นต์

{
    "allowed": true,
    "bytes": 0,
    "millis": 26,
    "name": "listener-listen",
    "path": [
        "foo"
    ],
    "querySet": [],
    "timestamp": 1484776335024,
    "unIndexed": false
}

ผู้ฟังออกอากาศ

การดำเนินการนี้ครอบคลุมข้อมูลที่ส่งจากเซิร์ฟเวอร์ไปยังไคลเอนต์ทั้งหมดที่กำลังรับฟังในตำแหน่งที่กำหนดหลังจากการดำเนินการเขียนและอัปเดตทุกครั้ง การเปลี่ยนแปลงข้อมูลจะนำไปสู่การดำเนินการออกอากาศ อย่างไรก็ตาม คุณอาจเห็นการอัปเดต 0 รายการหากไม่มีไคลเอ็นต์ใดกำลังฟังอยู่

{
    "bytes": 56, // Total bytes sent across clients
    "clientsUpdated": 3, // This may be 0 if no clients are listening
    "millis": 17,
    "name": "listener-broadcast",
    "path": [
        "baz",
        "mar"
    ],
    "timestamp": 1484775969928
}

ผู้ฟัง-ไม่ฟัง

การดำเนินการเหล่านี้สะท้อนถึงไคลเอ็นต์การฟังที่ลงชื่อออกหรือหยุดการฟังผ่านวิธีการแยกออก (เช่น off() สำหรับเว็บ หรือ removeAllObservers สำหรับ iOS)

{
    "name": "listener-unlisten",
    "path": [
        "foo"
    ],
    "timestamp": 1484776335044
}

ส่วนที่เหลืออ่าน

GET คำขอผ่าน REST API

{
    "allowed": true,
    "bytes": 348, // This would be 0 if the read data was null
    "millis": 26,
    "name": "rest-read",
    "path": [],
    "querySet": [
        {
            "default": true,
            "endIndexValue": "[MAX_NAME]",
            "equality": false,
            "index": {},
            "limit": null,
            "range": false,
            "simpleLimit": false,
            "startIndexValue": "[MIN_NAME]",
            "viewFrom": null
        }
    ],
    "timestamp": 1484775747416
}

ส่วนที่เหลือเขียน

คำขอ PUT และ POST ผ่าน REST API คำขอ DELETE สะท้อนถึงการดำเนินการ rest-write ขนาด 0 ไบต์

{
    "allowed": true,
    "bytes": 13,
    "millis": 116,
    "name": "rest-write",
    "path": [],
    "timestamp": 1484775917216
}

ส่วนที่เหลือการทำธุรกรรม

สำหรับพฤติกรรมเหมือนธุรกรรม ให้ใช้ Conditional Requests การดำเนินการ rest-transaction จะบันทึกคำขอโดยใช้ส่วนหัว Etag หรือ if-match

{
    "allowed": true,
    "bytes": 13,
    "millis": 116,
    "name": "rest-transaction",
    "path": [],
    "timestamp": 1484775917216
}

ส่วนที่เหลืออัปเดต

การอัปเดตผ่าน REST API สะท้อนถึงคำขอ PATCH

{
    "allowed": true,
    "bytes": 5,
    "millis": 11,
    "name": "rest-update",
    "path": [
        "baz",
        "mar"
    ],
    "timestamp": 1484775969930
}

เมื่อตัดการเชื่อมต่อใส่

การดำเนินการเหล่านี้สะท้อนให้เห็นถึงการเพิ่มผู้ฟัง onDisconnect เพื่อดำเนินการเขียน ตัวอย่างเช่น เมื่อคุณใช้ onDisconnect().setValue()

{
    "allowed": true,
    "bytes": 4,
    "millis": 2,
    "name": "on-disconnect-put",
    "path": [
        "baz",
        "mar"
    ],
    "timestamp": 1484775969930
}

เมื่อตัดการเชื่อมต่ออัปเดต

การดำเนินการเหล่านี้สะท้อนให้เห็นถึงการเพิ่มตัวฟัง onDisconnect เพื่ออัปเดตการดำเนินการ ตัวอย่างเช่น เมื่อคุณใช้ onDisconnect().updateChildren()

{
    "allowed": true,
    "bytes": 4,
    "millis": 2,
    "name": "on-disconnect-update",
    "path": [
        "baz",
        "mar"
    ],
    "timestamp": 1484775969930
}

เมื่อตัดการเชื่อมต่อยกเลิก

การดำเนินการเหล่านี้สะท้อนถึงการลบผู้ฟัง onDisconnect ตัวอย่างเช่น เมื่อคุณใช้ onDisconnect().set().cancel()

{
    "millis": 2,
    "name": "on-disconnect-cancel",
    "path": [
        "baz",
        "mar"
    ],
    "timestamp": 1484775969930
}

ทำงานเมื่อตัดการเชื่อมต่อ

การดำเนินการเหล่านี้สะท้อนถึงการกระตุ้นของผู้ฟัง onDisconnect เมื่อไคลเอ็นต์แบบเรียลไทม์ตัดการเชื่อมต่อหลังจากเพิ่มตัวฟัง onDisconnect อย่างน้อยหนึ่งตัว ตัวสร้างโปรไฟล์จะบันทึกการดำเนินการ run-on-disconnect ครั้งเดียวเพื่อสะท้อนถึงไบต์และเวลารวมของตัวฟัง onDisconnect ทั้งหมดที่ทริกเกอร์

{
    "bytes": 4,
    "millis": 2,
    "name": "run-on-disconnect",
    "timestamp": 1484775969930
}