Azure Storage Explorer
InternalAn internal Python application that makes file-location searches across approximately 420 TB of Azure data practical through indexed metadata and background refreshes.

The problem
Staff needed to locate files across a large Azure data estate, where manual searches could take hours. The tool needed to search metadata efficiently, export useful results, and stay responsive while its index was refreshed.
What I built
- Indexed file discovery. I engineered a Python application using Azure Blob Inventory, MongoDB, and SQLite to search metadata across approximately 420 TB of enterprise data.
- Responsive search and export. Multithreaded work supports file-location queries, result exports, and background metadata refreshes without making the interface wait for all processing to finish.
- Refreshes that preserve usable data. Failed updates retain the last valid database so staff can keep searching while a refresh issue is resolved.
Why I built it this way
- Search metadata rather than file contents. The immediate problem was finding where files lived. An indexed inventory targets that task without requiring every search to traverse the full data estate.
- Move long-running work off the interface. Inventory processing and refreshes need time. Background work keeps searches and result handling usable during those operations.
- Keep the last valid index available. An unsuccessful refresh should not turn a data-maintenance problem into a complete search outage. Preserving the valid database maintains a useful recovery point.
What I learned
I practiced designing tools around the scale and workflow of an enterprise data estate. Indexing solves the search problem only when refreshes, exports, responsiveness, and failure recovery also fit the way staff work.
Evidence & current limits
Staff file-location searches were reduced from hours to seconds or minutes. The 420 TB figure describes the underlying data estate, not the size of the metadata database. The application and operational data are internal to DFO; public source and interface screenshots are unavailable.