Bring Vector Search And Storage To The Data Lake With Lance

OCT 20, 202458 MIN
Data Engineering Podcast

Bring Vector Search And Storage To The Data Lake With Lance

OCT 20, 202458 MIN

Description

Summary<br />The rapid growth of generative AI applications has prompted a surge of investment in vector databases. While there are numerous engines available now, Lance is designed to integrate with data lake and lakehouse architectures. In this episode Weston Pace explains the inner workings of the Lance format for table definitions and file storage, and the optimizations that they have made to allow for fast random access and efficient schema evolution. In addition to integrating well with data lakes, Lance is also a first-class participant in the Arrow ecosystem, making it easy to use with your existing ML and AI toolchains. This is a fascinating conversation about a technology that is focused on expanding the range of options for working with vector data.<br />Announcements<br /><ul><li>Hello and welcome to the Data Engineering Podcast, the show about modern data management</li><li>Imagine catching data issues before they snowball into bigger problems. That’s what Datafold’s new Monitors do. With automatic monitoring for cross-database data diffs, schema changes, key metrics, and custom data tests, you can catch discrepancies and anomalies in real time, right at the source. Whether it’s maintaining data integrity or preventing costly mistakes, Datafold Monitors give you the visibility and control you need to keep your entire data stack running smoothly. Want to stop issues before they hit production? Learn more at <a href="https://www.dataengineeringpodcast.com/datafold" target="_blank">dataengineeringpodcast.com/datafold</a> today!</li><li>Your host is Tobias Macey and today I'm interviewing Weston Pace about the Lance file and table format for column-oriented vector storage</li></ul>Interview<br /><ul><li>Introduction</li><li>How did you get involved in the area of data management?</li><li>Can you describe what Lance is and the story behind it?<ul><li>What are the core problems that Lance is designed to solve?<ul><li>What is explicitly out of scope?</li></ul></li></ul></li><li>The README mentions that it is straightforward to convert to Lance from Parquet. What is the motivation for this compatibility/conversion support?<ul><li>What formats does Lance replace or obviate?</li></ul></li><li>In terms of data modeling Lance obviously adds a vector type, what are the features and constraints that engineers should be aware of when modeling their embeddings or arbitrary vectors?<ul><li>Are there any practical or hard limitations on vector dimensionality?</li></ul></li><li>When generating Lance files/datasets, what are some considerations to be aware of for balancing file/chunk sizes for I/O efficiency and random access in cloud storage?</li><li>I noticed that the file specification has space for feature flags. How has that aided in enabling experimentation in new capabilities and optimizations?</li><li>What are some of the engineering and design decisions that were most challenging and/or had the biggest impact on the performance and utility of Lance?</li><li>The most obvious interface for reading and writing Lance files is through LanceDB. Can you describe the use cases that it focuses on and its notable features?<ul><li>What are the other main integrations for Lance?</li><li>What are the opportunities or roadblocks in adding support for Lance and vector storage/indexes in e.g. Iceberg or Delta to enable its use in data lake environments?</li></ul></li><li>What are the most interesting, innovative, or unexpected ways that you have seen Lance used?</li><li>What are the most interesting, unexpected, or challenging lessons that you have learned while working on the Lance format?</li><li>When is Lance the wrong choice?</li><li>What do you have planned for the future of Lance?</li></ul>Contact Info<br /><ul><li><a href="https://www.linkedin.com/in/weston-pace-cool-dude/" target="_blank">LinkedIn</a></li><li><a href="https://github.com/westonpace" target="_blank">GitHub</a></li></ul>Parting Question<br /><ul><li>From your perspective, what is the biggest gap in the tooling or technology for data management today?</li></ul>Links<br /><ul><li><a href="https://lancedb.github.io/lance/" target="_blank">Lance Format</a></li><li><a href="https://lancedb.github.io/lancedb/" target="_blank">LanceDB</a></li><li><a href="https://substrait.io/" target="_blank">Substrait</a></li><li><a href="https://arrow.apache.org/docs/python/index.html" target="_blank">PyArrow</a></li><li><a href="https://github.com/facebookresearch/faiss" target="_blank">FAISS</a></li><li><a href="https://www.pinecone.io/" target="_blank">Pinecone</a><ul><li><a href="https://www.dataengineeringpodcast.com/pinecone-vector-database-similarity-search-episode-189/" target="_blank">Podcast Episode</a></li></ul></li><li><a href="https://parquet.apache.org/" target="_blank">Parquet</a></li><li><a href="https://iceberg.apache.org/" target="_blank">Iceberg</a><ul><li><a href="https://www.dataengineeringpodcast.com/iceberg-with-ryan-blue-episode-52/" target="_blank">Podcast Episode</a></li></ul></li><li><a href="https://delta.io/" target="_blank">Delta Lake</a><ul><li><a href="https://www.dataengineeringpodcast.com/delta-lake-data-lake-episode-85/" target="_blank">Podcast Episode</a></li></ul></li><li><a href="https://github.com/lancedb/lance/tree/main/python" target="_blank">PyLance</a></li><li><a href="https://en.wikipedia.org/wiki/Hilbert_curve" target="_blank">Hilbert Curves</a></li><li><a href="https://en.wikipedia.org/wiki/Scale-invariant_feature_transform" target="_blank">SIFT Vectors</a></li><li><a href="https://aws.amazon.com/s3/storage-classes/express-one-zone/" target="_blank">S3 Express</a></li><li><a href="https://www.weka.io/" target="_blank">Weka</a></li><li><a href="https://datafusion.apache.org/" target="_blank">DataFusion</a></li><li><a href="https://www.ray.io/" target="_blank">Ray Data</a></li><li><a href="https://pytorch.org/tutorials/beginner/basics/data_tutorial.html#preparing-your-data-for-training-with-dataloaders" target="_blank">Torch Data Loader</a></li><li><a href="https://lancedb.github.io/lancedb/concepts/index_hnsw/" target="_blank">HNSW == Hierarchical Navigable Small Worlds</a> vector index</li><li><a href="https://lancedb.github.io/lancedb/concepts/index_ivfpq/" target="_blank">IVFPQ</a> vector index</li><li><a href="https://geojson.org/" target="_blank">GeoJSON</a></li><li><a href="https://docs.pola.rs/" target="_blank">Polars</a></li></ul>The intro and outro music is from <a href="http://freemusicarchive.org/music/The_Freak_Fandango_Orchestra/Love_death_and_a_drunken_monkey/04_-_The_Hug" target="_blank">The Hug</a> by <a href="http://freemusicarchive.org/music/The_Freak_Fandango_Orchestra/" target="_blank">The Freak Fandango Orchestra</a> / <a href="http://creativecommons.org/licenses/by-sa/3.0/" target="_blank">CC BY-SA</a>