นี่เป็นแอปพลิเคชั่นบันทึก / นับที่นับจำนวนแพ็กเก็ตและการนับประเภทของแพ็คเก็ต ฯลฯ ในเครือข่ายการแชท p2p ซึ่งเท่ากับประมาณ 4-6 ล้านแพ็กเก็ตในระยะเวลา 5 นาที และเนื่องจากฉันใช้เพียงแค่ "ภาพรวม" ของข้อมูลนี้ฉันจึงลบแพ็กเก็ตที่เก่ากว่า 5 นาทีทุกห้านาที ดังนั้นจำนวนสูงสุดของไอเท็มที่จะอยู่ในคอลเล็กชันนี้คือ 10 ถึง 12 ล้าน
เนื่องจากฉันต้องทำการเชื่อมต่อ 300 กับ superpeers ที่แตกต่างกันจึงเป็นไปได้ที่แต่ละแพ็กเก็ตจะพยายามแทรกอย่างน้อย 300 ครั้ง (ซึ่งอาจเป็นเหตุผลว่าทำไมการเก็บข้อมูลนี้ไว้ในหน่วยความจำจึงเป็นตัวเลือกที่สมเหตุสมผลเท่านั้น)
ปัจจุบันฉันใช้พจนานุกรมเพื่อจัดเก็บข้อมูลนี้ แต่เนื่องจากรายการจำนวนมากที่ฉันพยายามจัดเก็บฉันจึงพบปัญหากับกองวัตถุขนาดใหญ่และปริมาณการใช้หน่วยความจำเติบโตอย่างต่อเนื่องตลอดเวลา
Dictionary<ulong, Packet>
public class Packet
{
public ushort RequesterPort;
public bool IsSearch;
public string SearchText;
public bool Flagged;
public byte PacketType;
public DateTime TimeStamp;
}
ฉันได้ลองใช้ mysql แต่ไม่สามารถติดตามปริมาณข้อมูลที่ฉันต้องการแทรก (ขณะตรวจสอบเพื่อให้แน่ใจว่าไม่ซ้ำกัน) และนั่นคือขณะที่ใช้ธุรกรรม
ฉันพยายาม mongodb แต่การใช้ซีพียูสำหรับมันนั้นบ้าและไม่ได้เก็บไว้อย่างใดอย่างหนึ่ง
ปัญหาหลักของฉันเกิดขึ้นทุก 5 นาทีเพราะฉันลบแพ็กเก็ตทั้งหมดที่เก่ากว่า 5 นาทีและใช้ "ภาพรวม" ของข้อมูลนี้ เช่นฉันใช้การสืบค้น LINQ เพื่อนับจำนวนแพ็คเก็ตที่มีประเภทแพ็คเก็ตบางอย่าง ฉันยังเรียกใช้แบบสอบถาม () ที่แตกต่างกันของข้อมูลที่ฉันดึงข้อมูล 4 ไบต์ (ที่อยู่ IP) ออกจากคีย์ของ keyvaluepair และรวมเข้ากับค่าที่ร้องขอในมูลค่าของ keyvalupair และใช้เพื่อรับจำนวนที่แตกต่างกันของ เพื่อนจากทุกแพ็กเก็ต
ปัจจุบันแอปพลิเคชันวนเวียนอยู่รอบ ๆ การใช้หน่วยความจำ 1.1GB และเมื่อมีการเรียกใช้สแน็ปช็อตมันจะสามารถใช้งานได้เป็นสองเท่า
ตอนนี้จะไม่เป็นปัญหาหากฉันมี ram จำนวนบ้า แต่ vm ที่ฉันใช้งานอยู่นั้น จำกัด อยู่ที่ 2GB ของ ram ในขณะนี้
มีวิธีแก้ปัญหาง่าย ๆ ไหม?