improvement: migrations, batch inserts
This commit is contained in:
		
							parent
							
								
									41dd620d74
								
							
						
					
					
						commit
						31f60ad6fd
					
				
					 2 changed files with 53 additions and 9 deletions
				
			
		|  | @ -735,40 +735,81 @@ impl Database { | |||
|                     let shortroomid = db.globals.next_count()?.to_be_bytes(); | ||||
|                     db.rooms.roomid_shortroomid.insert(&room_id, &shortroomid)?; | ||||
|                     db.rooms.shortroomid_roomid.insert(&shortroomid, &room_id)?; | ||||
|                     println!("Migration: 8"); | ||||
|                 } | ||||
|                 // Update pduids db layout
 | ||||
|                 for (key, v) in db.rooms.pduid_pdu.iter() { | ||||
|                 let mut batch = db.rooms.pduid_pdu.iter().filter_map(|(key, v)| { | ||||
|                     if !key.starts_with(b"!") { | ||||
|                         return None; | ||||
|                     } | ||||
|                     let mut parts = key.splitn(2, |&b| b == 0xff); | ||||
|                     let room_id = parts.next().unwrap(); | ||||
|                     let count = parts.next().unwrap(); | ||||
| 
 | ||||
|                     let short_room_id = db.rooms.roomid_shortroomid.get(&room_id)?.unwrap(); | ||||
|                     let short_room_id = db | ||||
|                         .rooms | ||||
|                         .roomid_shortroomid | ||||
|                         .get(&room_id) | ||||
|                         .unwrap() | ||||
|                         .expect("shortroomid should exist"); | ||||
| 
 | ||||
|                     let mut new_key = short_room_id; | ||||
|                     new_key.extend_from_slice(count); | ||||
| 
 | ||||
|                     println!("{:?}", new_key); | ||||
|                     Some((new_key, v)) | ||||
|                 }); | ||||
| 
 | ||||
|                 db.rooms.pduid_pdu.insert_batch(&mut batch)?; | ||||
| 
 | ||||
|                 for (key, _) in db.rooms.pduid_pdu.iter() { | ||||
|                     if key.starts_with(b"!") { | ||||
|                         db.rooms.pduid_pdu.remove(&key); | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|                 db.globals.bump_database_version(8)?; | ||||
| 
 | ||||
|                 println!("Migration: 7 -> 8 finished"); | ||||
|             } | ||||
| 
 | ||||
|             if db.globals.database_version()? < 9 { | ||||
|                 // Update tokenids db layout
 | ||||
|                 for (key, _) in db.rooms.tokenids.iter() { | ||||
|                 let mut batch = db.rooms.tokenids.iter().filter_map(|(key, _)| { | ||||
|                     if !key.starts_with(b"!") { | ||||
|                         return None; | ||||
|                     } | ||||
|                     let mut parts = key.splitn(4, |&b| b == 0xff); | ||||
|                     let room_id = parts.next().unwrap(); | ||||
|                     let word = parts.next().unwrap(); | ||||
|                     let _pdu_id_room = parts.next().unwrap(); | ||||
|                     let pdu_id_count = parts.next().unwrap(); | ||||
| 
 | ||||
|                     let short_room_id = db.rooms.roomid_shortroomid.get(&room_id)?.unwrap(); | ||||
|                     let short_room_id = db | ||||
|                         .rooms | ||||
|                         .roomid_shortroomid | ||||
|                         .get(&room_id) | ||||
|                         .unwrap() | ||||
|                         .expect("shortroomid should exist"); | ||||
|                     let mut new_key = short_room_id; | ||||
|                     new_key.extend_from_slice(word); | ||||
|                     new_key.push(0xff); | ||||
|                     new_key.extend_from_slice(pdu_id_count); | ||||
|                     println!("{:?}", new_key); | ||||
|                     println!("old {:?}", key); | ||||
|                     println!("new {:?}", new_key); | ||||
|                     Some((new_key, Vec::new())) | ||||
|                 }); | ||||
| 
 | ||||
|                 db.rooms.tokenids.insert_batch(&mut batch)?; | ||||
| 
 | ||||
|                 for (key, _) in db.rooms.tokenids.iter() { | ||||
|                     if key.starts_with(b"!") { | ||||
|                         db.rooms.pduid_pdu.remove(&key)?; | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|                 db.globals.bump_database_version(8)?; | ||||
|                 db.globals.bump_database_version(9)?; | ||||
| 
 | ||||
|                 println!("Migration: 7 -> 8 finished"); | ||||
|                 println!("Migration: 8 -> 9 finished"); | ||||
|             } | ||||
| 
 | ||||
|             panic!(); | ||||
|  |  | |||
|  | @ -223,7 +223,10 @@ impl Tree for SqliteTable { | |||
| 
 | ||||
|         let statement = Box::leak(Box::new( | ||||
|             guard | ||||
|                 .prepare(&format!("SELECT key, value FROM {} ORDER BY key ASC", &self.name)) | ||||
|                 .prepare(&format!( | ||||
|                     "SELECT key, value FROM {} ORDER BY key ASC", | ||||
|                     &self.name | ||||
|                 )) | ||||
|                 .unwrap(), | ||||
|         )); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue