[{"data":1,"prerenderedAt":321},["ShallowReactive",2],{"project-39399064":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":35,"aspects":36,"strip":46,"post_text":48,"what":49,"said":84,"maker_in_thread":187,"shape":194,"grid":198,"attempts":283,"same_week":284,"maker_shows":45,"maker_hidden":313,"reader_version":314,"card":315},"39399064","Airmail","Host a planet-scale geocoder for $10\u002Fmo","title","Show HN: Host a planet-scale geocoder for $10\u002Fmo","https:\u002F\u002Fblog.ellenhp.me\u002Fhost-a-planet-scale-geocoder-for-10-month","blog.ellenhp.me","ellenhp",1708100490,2024,127,34,676,3515,20,"notable","data","geocoding","other",[24,25,26,27,28],"geocoder","address search","self-hosted geocoding","tantivy","range requests","loved",0.371,{"positive":32,"neutral":33,"mixed":34,"critical":34},10,7,1,19,{"performance":37,"idea":39,"execution":40,"docs":42,"design":43,"pricing":44},{"positive":38,"critical":38},0,{"positive":34,"critical":34},{"positive":41,"critical":38},2,{"positive":34,"critical":38},{"positive":38,"critical":38},{"positive":45,"critical":38},3,[45,45,45,38,38,38,47,45,47,45,45,47,47,38,45,47,38,45,47,47,38,38,38,38,38,47,34,38,38,38,38,47,47],5,"For the uninitiated, a geocoder is maps-tech jargon for a search engine for addresses and points of interest.\n\nGeocoders are expensive to run. Like, really expensive. Like, $100+\u002Fmonth per instance expensive unless you go for a budget provider. I've been poking at this problem for about a month now and I think I've come up with something kind of cool. I'm calling it Airmail. Airmail's unique feature is that it can query against a remote index, e.g. on object storage or on a static site somewhere. This, along with low memory requirements mean it's about 10x cheaper to run an Airmail instance th",{"problem":50,"audience":56,"pricing":56,"motivation":57,"time_to_build":56,"stack":64,"openness":81,"stage":82,"team_size":83},{"value":51,"source":52,"evidence":53},"Geocoders are expensive to run because they need lots of RAM and storage per instance","maker",[54],{"id":55},"post",null,{"value":58,"source":52,"evidence":59},"Make geocoding much cheaper to self-host than Nominatim or Pelias",[60,61],{"id":55},{"id":62,"by":11,"text":63},"39406254","I think I priced Nominatim on EC2 and it came in around $350\u002Fmo because you need 64GB of RAM. Also on EC2 Pelias ended up being close to $100\u002Fmo. Keep in mind that I'm including…",[65,73],{"value":66,"source":67,"evidence":68},"Rust","inferred",[69],{"id":70,"by":71,"text":72},"39410712","francoismassot","> \"Do store the Sonic database on SSD-backed file systems only.\" From the README, it works only on SSD. All those projects serve different purposes, and several are not actively…",{"value":74,"source":75,"evidence":76},"Tantivy search library","commenter",[77,80],{"id":78,"by":71,"text":79},"39410135","The geocoder is built on top of tantivy which is fast and uses low resources too (https:\u002F\u002Fgithub.com\u002Fquickwit-oss\u002Ftantivy). I'm curious about the comparison between those two.",{"id":70,"by":71,"text":72},"open_source","prototype","unknown",{"praise":85,"objections":108,"requests":122,"questions":144,"alternatives":157},[86,93],{"value":87,"source":75,"evidence":88},"Remote index with range requests is a clever way to cut cost",[89],{"id":90,"by":91,"text":92},"39406347","mlhpdx","I’m a Range request fan-boy, so thanks for sharing. Byte-indexing static objects is basically a brilliant point of light in the dark universe of code. I have fixed dozens of…",{"value":94,"source":75,"evidence":95},"Impressive achievement and good writeup",[96,100,104],{"id":97,"by":98,"text":99},"39406321","hampelm","This is super cool to read about! Geocoding is one of those _hard_ problems and this really seems like a great step forward.",{"id":101,"by":102,"text":103},"39403185","killingtime74","Amazing, thanks for the writeup and sharing",{"id":105,"by":106,"text":107},"39407168","renewiltord","Woah this is ridiculously good. You've done a good job here working off Pelias. I did find managing the Elasticsearch cluster for a production instance of Pelias hopelessly…",[109,115],{"value":110,"source":52,"evidence":111},"Not ready for production use, only a demo",[112],{"id":113,"by":11,"text":114},"39411321","There are ways to make it work on a budget, but with Nominatim you do need 64GB of physical memory at a minimum for the planet. Some of the other replies in this thread have…",{"value":116,"source":75,"evidence":117},"Brazilian address parsing returns poor results",[118],{"id":119,"by":120,"text":121},"39421073","mmaia","Congrats on the achievement. One trick part when working on \"planet-scale\" is parsing and matching the results for multiple countries. I tried some addresses in Brazil without…",[123,130,137],{"value":124,"source":75,"evidence":125},"Reverse geocoding support",[126],{"id":127,"by":128,"text":129},"39405230","nodesocket","Can it reverse geocode as well? lat\u002Flong to address",{"value":131,"source":75,"evidence":132},"S3 support",[133],{"id":134,"by":135,"text":136},"39410323","remram","Does it have support for S3? I admit I am a bit lost with all the new search options: tantivy, quickwit, sonic, meilisearch, zinc, toshi, lnx... A lot have popped up,…",{"value":138,"source":75,"evidence":139},"Better zoom on the demo map on mobile",[140],{"id":141,"by":142,"text":143},"39406913","macintux","Is there any way to zoom on the demo map in mobile? I’ve enjoyed my brief dalliances with digital cartography. I’m grateful for a stack like this that I can explore.",[145,150],{"value":146,"source":75,"evidence":147},"How does it compare to tantivy-based alternatives like Sonic or Quickwit",[148,149],{"id":78,"by":71,"text":79},{"id":134,"by":135,"text":136},{"value":151,"source":75,"evidence":152},"How much do Nominatim and Pelias really cost to run",[153],{"id":154,"by":155,"text":156},"39406137","binarymax","Which geocoder is $100\u002Fmo? Nominatim? Which cloud? Either way this looks really cool and I’ll give it a try!",[158,162,166,173,180],{"value":159,"source":75,"evidence":160},"Nominatim",[161],{"id":154,"by":155,"text":156},{"value":163,"source":52,"evidence":164},"Pelias",[165],{"id":62,"by":11,"text":63},{"value":167,"source":75,"evidence":168},"Photon",[169],{"id":170,"by":171,"text":172},"39405634","clementmas","I'm hosting Photon geocoder from Komoot. I find it decently accurate and not too expensive to run",{"value":174,"source":75,"evidence":175},"Sonic",[176],{"id":177,"by":178,"text":179},"39408448","lormayna","I don't know if it's fit your specific use case, but for pure search take a look to sonic (https:\u002F\u002Fgithub.com\u002Fvaleriansaliou\u002Fsonic). It's blazing fast and require very few…",{"value":181,"source":75,"evidence":182},"Google Maps API",[183],{"id":184,"by":185,"text":186},"39406554","Gigachad","Very cool. I went and had a look at the cost of using the Google maps api and this project seems like it would be pretty competitive with it.",{"comments":47,"answered":41,"key":188},[189,190,191],{"id":62,"text":63},{"id":113,"text":114},{"id":192,"text":193},"39406324","I love Photon, it's generally my favorite of the bunch to work with. My only objection to Photon is that it's kind of tough to build an index for it, but I think if memory serves…",{"commenters":195,"max_depth":47,"maker_replies":47,"first_comment_mins":196,"lifespan_hours":197},26,305,58,[199,201,203,204,206,208,211,213,215,217,220,222,225,227,229,232,234,236,239,241,243,247,250,253,255,257,261,266,269,272,274,277,280],[177,38,45,200,178,38],"project\u002Fneutral\u002Fnone",[78,38,45,202,71,38],"project\u002Fneutral\u002Fperformance",[134,38,45,200,135,38],[70,38,38,205,71,38],"other\u002Fneutral\u002Fnone",[207,38,38,205,71,38],"39410998",[209,38,38,205,210,38],"39425700","joshxyz",[97,34,47,212,98,38],"project\u002Fpositive\u002Fidea",[119,41,45,214,120,38],"project\u002Fmixed\u002Fexecution",[101,45,47,216,102,38],"maker\u002Fpositive\u002Fdocs",[127,218,45,219,128,38],4,"project\u002Fneutral\u002Fidea",[141,47,45,221,142,38],"project\u002Fneutral\u002Fdesign",[90,223,47,224,91,38],6,"project\u002Fpositive\u002Fexecution",[154,33,47,226,155,38],"project\u002Fpositive\u002Fpricing",[62,33,38,228,11,34],"maker\u002Fneutral\u002Fpricing",[230,33,45,228,231,38],"39407365","danielheath",[233,33,47,226,155,38],"39409291",[113,33,38,235,11,34],"maker\u002Fneutral\u002Fperformance",[237,33,45,228,238,38],"39410760","bufferoverflow",[105,240,47,224,106,38],8,[184,242,47,226,185,38],9,[244,242,38,245,246,38],"39406656","other\u002Fneutral\u002Fpricing","Brajeshwar",[248,242,38,205,249,38],"39407186","yawnxyz",[251,32,38,245,252,38],"39406822","christiangenco",[170,254,38,205,171,38],11,[192,254,38,256,11,34],"maker\u002Fneutral\u002Fnone",[258,254,47,259,260,38],"39406375","maker\u002Fpositive\u002Fnone","SOLAR_FIELDS",[262,263,34,264,265,38],"39406249",12,"project\u002Fcritical\u002Fidea","CyberDildonics",[267,263,38,268,11,34],"39406300","commenter\u002Fneutral\u002Fnone",[270,263,38,268,271,38],"39406376","ranger_danger",[273,263,38,268,11,34],"39406390",[275,263,38,268,276,38],"39406462","bhaney",[278,263,47,259,279,38],"39406592","Rodeoclash",[281,263,47,259,282,38],"39406716","patcon",[],[285,290,295,299,304,308],{"id":286,"name":287,"points":288,"category":289},"39429370","htmz",1020,"dev_tools",{"id":291,"name":292,"points":293,"category":294},"39377508","Gitlab Meeting Simulator",353,"productivity",{"id":296,"name":297,"points":298,"category":20},"39379339","Aldi Price Map",348,{"id":300,"name":301,"points":302,"category":303},"39402142","Driftmania",276,"games",{"id":305,"name":306,"points":307,"category":20},"39428609","plprql",267,{"id":309,"name":310,"points":311,"category":312},"39425706","RAM Prices",241,"finance_crypto",false,"v2",{"id":316,"name":5,"line":6,"ai":313,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":317,"top":18,"kw":318,"maker":11,"domain":10,"tier":19,"attempts":38,"strip":319,"url":9,"mix":320,"praise":87,"objection":110,"sub":21},39399064,0.37,[24,25,26,27,28],"333000535335503503550000051000055",[32,33,34,34],1794036649787]