Compare commits
	
		
			2 Commits
		
	
	
		
			ba13c76c53
			...
			5fb3fc0381
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5fb3fc0381 | |||
| 9a63553f8d | 
@ -1230,17 +1230,24 @@ func (d *Database) GetPrefixDetails(prefix string) ([]LiveRoute, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetRandomPrefixesByLength returns a random sample of prefixes with the specified mask length
 | 
					// GetRandomPrefixesByLength returns a random sample of prefixes with the specified mask length
 | 
				
			||||||
func (d *Database) GetRandomPrefixesByLength(maskLength, ipVersion, limit int) ([]LiveRoute, error) {
 | 
					func (d *Database) GetRandomPrefixesByLength(maskLength, ipVersion, limit int) ([]LiveRoute, error) {
 | 
				
			||||||
 | 
						// Select unique prefixes with their most recent route information
 | 
				
			||||||
	query := `
 | 
						query := `
 | 
				
			||||||
		SELECT DISTINCT 
 | 
							WITH unique_prefixes AS (
 | 
				
			||||||
			prefix, mask_length, ip_version, origin_asn, as_path, 
 | 
								SELECT prefix, MAX(last_updated) as max_updated
 | 
				
			||||||
			peer_ip, last_updated
 | 
								FROM live_routes
 | 
				
			||||||
		FROM live_routes
 | 
								WHERE mask_length = ? AND ip_version = ?
 | 
				
			||||||
		WHERE mask_length = ? AND ip_version = ?
 | 
								GROUP BY prefix
 | 
				
			||||||
		ORDER BY RANDOM()
 | 
								ORDER BY RANDOM()
 | 
				
			||||||
		LIMIT ?
 | 
								LIMIT ?
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							SELECT lr.prefix, lr.mask_length, lr.ip_version, lr.origin_asn, lr.as_path, 
 | 
				
			||||||
 | 
								lr.peer_ip, lr.last_updated
 | 
				
			||||||
 | 
							FROM live_routes lr
 | 
				
			||||||
 | 
							INNER JOIN unique_prefixes up ON lr.prefix = up.prefix AND lr.last_updated = up.max_updated
 | 
				
			||||||
 | 
							WHERE lr.mask_length = ? AND lr.ip_version = ?
 | 
				
			||||||
	`
 | 
						`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rows, err := d.db.Query(query, maskLength, ipVersion, limit)
 | 
						rows, err := d.db.Query(query, maskLength, ipVersion, limit, maskLength, ipVersion)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, fmt.Errorf("failed to query random prefixes: %w", err)
 | 
							return nil, fmt.Errorf("failed to query random prefixes: %w", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -92,3 +92,5 @@ CREATE INDEX IF NOT EXISTS idx_live_routes_ip_version_mask ON live_routes(ip_ver
 | 
				
			|||||||
CREATE INDEX IF NOT EXISTS idx_live_routes_last_updated ON live_routes(last_updated);
 | 
					CREATE INDEX IF NOT EXISTS idx_live_routes_last_updated ON live_routes(last_updated);
 | 
				
			||||||
-- Indexes for IPv4 range queries
 | 
					-- Indexes for IPv4 range queries
 | 
				
			||||||
CREATE INDEX IF NOT EXISTS idx_live_routes_ipv4_range ON live_routes(v4_ip_start, v4_ip_end) WHERE ip_version = 4;
 | 
					CREATE INDEX IF NOT EXISTS idx_live_routes_ipv4_range ON live_routes(v4_ip_start, v4_ip_end) WHERE ip_version = 4;
 | 
				
			||||||
 | 
					-- Index to optimize COUNT(DISTINCT prefix) queries
 | 
				
			||||||
 | 
					CREATE INDEX IF NOT EXISTS idx_live_routes_ip_mask_prefix ON live_routes(ip_version, mask_length, prefix);
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user