คำสั่งตัวสร้างโปรไฟล์ฐานข้อมูล 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 }