เข้าสู่ระบบไฟล์หรือตารางฐานข้อมูล?


12

ฉันกำลังพัฒนาเว็บแอปพลิเคชันที่ใช้ MS SQL สำหรับข้อมูลต่าง ๆ : รวมถึงผู้ใช้บัญชีผู้ใช้ใบอนุญาตผู้ใช้ราคาใบอนุญาตใบแจ้งหนี้

ฉันต้องการบันทึกการใช้งานแบบเรียลไทม์ของระบบของผู้ใช้และใช้สำหรับการเรียกเก็บเงินรายเดือน: เช่นบันทึกเมื่อใดก็ตามที่ผู้ใช้ได้รับหน้า / URL ที่เฉพาะเจาะจงและผู้ใช้ที่เรียกเก็บเงินเมื่อสิ้นเดือนตามจำนวนหน้าที่ดึงข้อมูล

  • ฉันควรเขียนบันทึกเหตุการณ์เหล่านี้ลงในตารางในฐานข้อมูล MS SQL ของฉันหรือไม่

  • ฉันควรเขียนเหตุการณ์บันทึกเหล่านี้ลงในไฟล์บันทึกแบบต่อท้ายที่ไม่ใช่ SQL เท่านั้นหรือไม่

  • ฉันควรเขียนบันทึกเหตุการณ์เหล่านี้ลงในไฟล์บันทึกที่แตกต่างกันสำหรับผู้ใช้แต่ละคนหรือไม่

นี่ไม่ใช่เว็บไซต์ที่มีปริมาณมากโดยเฉพาะตัวอย่างเช่นมีผู้ใช้สูงสุด 10,000 คนต่อการทำกิจกรรมเฉลี่ย 5 เหตุการณ์ต่อวัน => 50,000 กิจกรรม / วัน = 30 กิจกรรม / นาที = 18,000,000 กิจกรรม / ปี

ฉันถามเพราะดูเหมือนว่าตัวเลือกจะทำงานได้และฉันไม่เห็นว่ามีข้อได้เปรียบที่ชัดเจน

ข้อมูลที่เกี่ยวข้องกับเหตุการณ์ที่เรียกเก็บเงินได้นั้นง่ายมากเช่น:

  • ID ผู้ใช้ (ความสัมพันธ์กับ foreign key ไปยังตารางผู้ใช้ใน SQL)
  • วันและเวลา
  • URL ของหน้าที่เรียกเก็บเงินได้

คำตอบของฉันสำหรับคำถามนี้มีดังนี้:

  • ประโยชน์บางประการของการเขียนบันทึกลงในตารางฐานข้อมูล:

    • ความสัมพันธ์เชิงสัมพันธ์: เช่นเหตุการณ์ที่บันทึกไว้จะเชื่อมโยงกับ ID ผู้ใช้ที่ถูกต้อง (โดยกำหนด ID ผู้ใช้เป็น foreign key ระหว่างตาราง)
    • อ่านง่ายสำหรับการเรียกเก็บเงิน: เช่นSELECT COUNT GROUP BYเพื่อนับจำนวนบันทึกเหตุการณ์ต่อผู้ใช้
  • ประโยชน์ของการเขียนไปยังล็อกไฟล์:

    • ประสิทธิภาพที่ง่ายขึ้น: SQL ถูกใช้น้อยกว่าเช่นสำหรับเหตุการณ์การเข้าสู่ระบบของผู้ใช้และส่วนใหญ่ใช้สำหรับการอ่านเท่านั้น
    • การจัดการที่ง่ายขึ้น: เก็บถาวรข้อมูลเก่าได้ง่ายกว่าเช่นสิ้นปีย้ายไฟล์บันทึกเก่าแทนที่จะลบหรือเก็บถาวรจากฐานข้อมูล

โปรดแจ้งให้เราทราบหากคำตอบของฉันไม่ถูกต้อง หรือพูดเกินจริงถึงความสำคัญของบางสิ่ง; หรือลืมการพิจารณาที่สำคัญบางอย่าง

และ / หรือโปรดแจ้งให้เราทราบว่าคำตอบของคุณคืออะไรถ้ามันแตกต่างจากของฉัน


3
คุณต้องแยกข้อมูลที่ใช้สำหรับการตัดสินใจทางธุรกิจออกจากข้อมูลการบันทึกทั่วไป เก็บทุกอย่างที่แอปพลิเคชันของคุณจะใช้ในฐานข้อมูลและสิ่งอื่น ๆ ในล็อกไฟล์
ทอม

1
หากคุณกำลังใช้แพ็คเกจที่รู้จักกันดีเช่น log4net - และมันอาจเป็นความคิดที่ดีแทนที่จะเป็นของคุณเอง - มันควรจะเป็นแค่เรื่องของการตั้งค่าการพลิกทำเช่นกัน @tom - การแยกเป็นสิ่งที่ดี แต่ทำไมไม่เพียงแค่มีสองฐานข้อมูลหนึ่งฐานข้อมูลสดและอีกหนึ่งฐานข้อมูลสำหรับการเก็บบันทึก ฯลฯ ?
Julia Hayward

2
OP บอกว่าเป็นการเรียกเก็บเงินรายเดือนดังนั้นฉันคาดว่าจะใช้ตรรกะการเรียกเก็บเงินกับฐานข้อมูลจะง่ายกว่าไฟล์แบบแฟลตหรือไม่
Julia Hayward

1
คุณใช้คำว่า "SQL" เมื่อคุณหมายถึง "ฐานข้อมูล" ฉันทำการแก้ไขบางอย่าง SQL เป็นภาษาที่คุณใช้อ่านและเขียนไปยังฐานข้อมูล MS SQL Server เป็นชื่อของ RDBMS "SQL" เพียงอย่างเดียวไม่ได้หมายความว่า "ฐานข้อมูล MS SQL Server"
Tulains Córdova

1
@gnat ฉันไม่คิดว่านี่เป็นสิ่งที่ซ้ำกัน: อีกข้อหนึ่งเกี่ยวกับการบันทึกข้อผิดพลาดในขณะที่เรื่องนี้เกี่ยวกับการใช้งานการบันทึกสำหรับการเรียกเก็บเงิน (และในกรณีนี้คำตอบที่ได้รับการยอมรับและยอมรับ
ChrisW

คำตอบ:


13

เนื่องจากคุณใช้ข้อมูลนี้เพื่อจุดประสงค์ในการเรียกเก็บเงินฉันไม่เห็นสาเหตุที่คุณไม่ต้องการในฐานข้อมูลที่สามารถสอบถามรวบรวมรวมรายงานและเข้าร่วมกับข้อมูลอื่นได้อย่างง่ายดาย

ฉันยังคิดว่าการบำรุงรักษาตารางฐานข้อมูลเดียวที่มีข้อมูลบันทึกนั้นง่ายกว่าการแยกไฟล์บันทึกเป็นกลุ่ม เช่นเดียวกับข้อกังวลของคุณเกี่ยวกับโหลดบนเซิร์ฟเวอร์ - มีวิธีจัดการกับวิธีนั้นได้ดีกว่าการใช้วิธีเก็บรักษาข้อมูลเป็นไฟล์แบน

ตัวเลือกที่สามของคุณคือทำทั้งสองอย่าง ใช้ฐานข้อมูลสำหรับความต้องการส่วนใหญ่ แต่มีล็อกไฟล์สำหรับวัตถุประสงค์ในการตรวจสอบ


3
โบนัสอีกอย่างสำหรับการใช้ฐานข้อมูลคือการใช้ทริกเกอร์สำหรับการบันทึกบางอย่าง ไม่มีรหัสเพิ่มเติมที่จำเป็น ถ้าข้อมูลถูกแทรกลงในตาราง A ให้ใส่ข้อความบันทึก X
Greg Burghardt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.