โครงสร้างข้อมูล Scala เพื่อขจัดงานที่ซ้ำกันที่ทำโดย Akka

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

ทุกครั้งที่ฉันได้รับข้อความจากพนักงาน ฉันจะตรวจสอบโครงสร้างข้อมูลนี้ว่ามีอะไรกำลังประมวลผลอยู่บ้าง หากประเภทข้อความดังกล่าวอยู่ระหว่างดำเนินการ ฉันจะจัดเก็บไว้ในโครงสร้างข้อมูลนั้นและรอผลการประมวลผล เมื่อประมวลผลผลลัพธ์มาถึง ฉันจะส่ง acks สำหรับข้อความประเภทนี้ที่เก็บไว้ทั้งหมด และลบออกจากโครงสร้าง

หากไม่พบประเภทข้อความดังกล่าวในโครงสร้างข้อมูลนี้ ฉันจะเก็บไว้ที่นั่นและเริ่มการประมวลผล

จนถึงตอนนี้ฉันนึกถึงบางอย่างเช่น mutable.Map[Long, Seq[ETLMessageMeta]]

มีอะไรที่ดีกว่าสำหรับงานดังกล่าวหรือไม่?


person Vasily802    schedule 21.09.2017    source แหล่งที่มา


คำตอบ (1)


หากแต่ละหน่วยของงานสามารถระบุได้โดยไม่ซ้ำกัน Map ก็ฟังดูเหมาะสมดี อย่างไรก็ตาม แทนที่จะใช้ mutable.Map ให้ใช้ immutable.Map ที่เป็น var เพื่อช่วยให้แน่ใจว่าสถานะที่ไม่แน่นอนนี้จะไม่รั่วไหลออกไปนอกตัวแสดงของผู้ปฏิบัติงาน ตัวอย่างเช่น:

class Worker extends Actor {
  var inProgress = immutable.Map[Long, Seq[ETLMessageMeta]]()

  def receive = ???
}
person Jeffrey Chung    schedule 21.09.2017