71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								@startuml
							 | 
						||
| 
								 | 
							
								package com.iluwatar.sharding {
							 | 
						||
| 
								 | 
							
								  class App {
							 | 
						||
| 
								 | 
							
								    + App()
							 | 
						||
| 
								 | 
							
								    + main(args : String[]) {static}
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  class Data {
							 | 
						||
| 
								 | 
							
								    - key : int
							 | 
						||
| 
								 | 
							
								    - type : DataType
							 | 
						||
| 
								 | 
							
								    - value : String
							 | 
						||
| 
								 | 
							
								    + Data(key : int, value : String, type : DataType)
							 | 
						||
| 
								 | 
							
								    + getKey() : int
							 | 
						||
| 
								 | 
							
								    + getType() : DataType
							 | 
						||
| 
								 | 
							
								    + getValue() : String
							 | 
						||
| 
								 | 
							
								    + setKey(key : int)
							 | 
						||
| 
								 | 
							
								    + setType(type : DataType)
							 | 
						||
| 
								 | 
							
								    + setValue(value : String)
							 | 
						||
| 
								 | 
							
								    + toString() : String
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  ~enum DataType {
							 | 
						||
| 
								 | 
							
								    + type1 {static}
							 | 
						||
| 
								 | 
							
								    + type2 {static}
							 | 
						||
| 
								 | 
							
								    + type3 {static}
							 | 
						||
| 
								 | 
							
								    + valueOf(name : String) : DataType {static}
							 | 
						||
| 
								 | 
							
								    + values() : DataType[] {static}
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  class HashShardManager {
							 | 
						||
| 
								 | 
							
								    - LOGGER : Logger {static}
							 | 
						||
| 
								 | 
							
								    + HashShardManager()
							 | 
						||
| 
								 | 
							
								    # allocateShard(data : Data) : int
							 | 
						||
| 
								 | 
							
								    + storeData(data : Data) : int
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  class LookupShardManager {
							 | 
						||
| 
								 | 
							
								    - LOGGER : Logger {static}
							 | 
						||
| 
								 | 
							
								    - lookupMap : Map<Integer, Integer>
							 | 
						||
| 
								 | 
							
								    + LookupShardManager()
							 | 
						||
| 
								 | 
							
								    # allocateShard(data : Data) : int
							 | 
						||
| 
								 | 
							
								    + storeData(data : Data) : int
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  class RangeShardManager {
							 | 
						||
| 
								 | 
							
								    - LOGGER : Logger {static}
							 | 
						||
| 
								 | 
							
								    + RangeShardManager()
							 | 
						||
| 
								 | 
							
								    # allocateShard(data : Data) : int
							 | 
						||
| 
								 | 
							
								    + storeData(data : Data) : int
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  class Shard {
							 | 
						||
| 
								 | 
							
								    - dataStore : Map<Integer, Data>
							 | 
						||
| 
								 | 
							
								    - id : int
							 | 
						||
| 
								 | 
							
								    + Shard(id : int)
							 | 
						||
| 
								 | 
							
								    + clearData()
							 | 
						||
| 
								 | 
							
								    + getDataById(id : int) : Data
							 | 
						||
| 
								 | 
							
								    + getId() : int
							 | 
						||
| 
								 | 
							
								    + storeData(data : Data)
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  abstract class ShardManager {
							 | 
						||
| 
								 | 
							
								    - LOGGER : Logger {static}
							 | 
						||
| 
								 | 
							
								    # shardMap : Map<Integer, Shard>
							 | 
						||
| 
								 | 
							
								    + ShardManager()
							 | 
						||
| 
								 | 
							
								    + addNewShard(shard : Shard) : boolean
							 | 
						||
| 
								 | 
							
								    # allocateShard(Data) : int {abstract}
							 | 
						||
| 
								 | 
							
								    + getShardById(shardId : int) : Shard
							 | 
						||
| 
								 | 
							
								    + removeShardById(shardId : int) : boolean
							 | 
						||
| 
								 | 
							
								    + storeData(Data) : int {abstract}
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								DataType ..+ Data
							 | 
						||
| 
								 | 
							
								Data -->  "-type" DataType
							 | 
						||
| 
								 | 
							
								HashShardManager --|> ShardManager 
							 | 
						||
| 
								 | 
							
								LookupShardManager --|> ShardManager 
							 | 
						||
| 
								 | 
							
								RangeShardManager --|> ShardManager 
							 | 
						||
| 
								 | 
							
								@enduml
							 |