[{"data":1,"prerenderedAt":357},["ShallowReactive",2],{"project-18725485":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":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":44,"post_text":46,"what":47,"said":95,"maker_in_thread":196,"shape":198,"grid":202,"attempts":319,"same_week":320,"maker_shows":31,"maker_hidden":349,"reader_version":350,"card":351},"18725485","Serverless Analytics (Statsbot \u002F Cube.js)","Serverless Analytics Built from Scratch","title","Show HN: Serverless Analytics Built from Scratch","https:\u002F\u002Fstatsbotco.github.io\u002Fcubejs-client\u002Faws-web-analytics\u002F","statsbotco.github.io","keydunov",1545318568,2018,114,47,380,2155,18,"notable","data","web analytics","library",[21,24,25,26,27],"serverless analytics","google analytics alternative","cube.js","aws lambda","curious",0.024,{"positive":31,"neutral":32,"mixed":33,"critical":34},4,16,0,5,25,{"idea":37,"pricing":40,"design":41,"execution":42,"performance":43},{"positive":38,"critical":39},1,2,{"positive":33,"critical":33},{"positive":33,"critical":33},{"positive":38,"critical":39},{"positive":33,"critical":38},[33,33,33,33,33,33,38,33,33,33,34,38,33,33,33,33,33,33,34,45,34,45,45,45,45,33,45,45,38,34,33,38,33,33,38,45,33,45,45,45],3,null,{"problem":46,"audience":46,"pricing":46,"motivation":48,"time_to_build":46,"stack":56,"openness":93,"stage":94,"team_size":94},{"value":49,"source":50,"evidence":51},"Track site stats without putting a Google Analytics tag on the page, and query the data freely.","commenter",[52],{"id":53,"by":54,"text":55},"18727410","teej","Some people don’t want to put a GA tag on their site because of concerns around how Google uses the data. Also you can’t arbitrarily query GA data so this gives you that…",[57,68,72,82,86],{"value":58,"source":59,"evidence":60},"AWS Lambda","inferred",[61,65],{"id":62,"by":63,"text":64},"18726696","cheriot","I'd be curious to see a cost estimate for some traffic level. I wonder if there's a way to put the pixel in s3 and process the access logs more cheaply.",{"id":66,"by":54,"text":67},"18727148","S3 access logs alone are not sufficient to replicate this pipeline. This pixel is stateful (for the anonymous user ID) and S3 access logs don’t include arbitrary headers, in this…",{"value":69,"source":59,"evidence":70},"AWS Kinesis",[71],{"id":66,"by":54,"text":67},{"value":73,"source":59,"evidence":74},"AWS Athena",[75,79],{"id":76,"by":77,"text":78},"18726972","InGodsName","Here is some more data: http:\u002F\u002Fhighscalability.com\u002Fblog\u002F2018\u002F4\u002F2\u002Fhow-ipdata-serves-25m-api-calls-from-10-infinitely-scalable.html I don't understand what's cubejs doing in this…",{"id":80,"by":77,"text":81},"18729168","Why do you need to select all rows in your Cubejs section when you can directly run query in athena and get back the aggregates you need. Basically you select all rows then cubjs…",{"value":83,"source":59,"evidence":84},"API Gateway",[85],{"id":66,"by":54,"text":67},{"value":87,"source":50,"evidence":88},"Cube.js",[89],{"id":90,"by":91,"text":92},"18728734","pavel_tiunov","Thanks for the question! We should do a better job describing this. In short: 1. Generates analytic SQL queries based on Cube.js schema. It can be simple ones like calculating…","open_source","unknown",{"praise":96,"objections":111,"requests":146,"questions":158,"alternatives":173},[97,104],{"value":98,"source":50,"evidence":99},"Interesting and nicely presented",[100],{"id":101,"by":102,"text":103},"18730570","gingerlime","Interesting and nicely presented! I built a prototype of something very similar, but using Google BigQuery to store and extract data[0] but never took it beyond the concept…",{"value":105,"source":50,"evidence":106},"Clever meta idea of a serverless analytics tool featured on HN",[107],{"id":108,"by":109,"text":110},"18730474","code4tee","Build serverless app to track web stats. Get it featured on Hacker News and use the flood of traffic to demo what was done. Very meta. Nice job.",[112,119,129,136],{"value":113,"source":50,"evidence":114},"Cannot replicate Google Analytics session and user metrics",[115],{"id":116,"by":117,"text":118},"18727460","soared","I mean as a POC its not bad, but google analytics is not the same as analyzing server logs (contrary to what most people would suggest). Most of the value of ga comes from…",{"value":120,"source":50,"evidence":121},"Vulnerable to bot and scanner traffic corrupting data",[122,125],{"id":123,"by":54,"text":124},"18727028","This sort of thing works until you have one person run a security scan on your site, corrupting your user agents and event types.",{"id":126,"by":127,"text":128},"18727721","asien","> google analytics is not the same as analyzing server logs This is what most people don’t get with ga. Google Analytics does the heavy lift by removing incoherent , corrupted or…",{"value":130,"source":50,"evidence":131},"Endless loading bug",[132],{"id":133,"by":134,"text":135},"18730366","sbussard","Endless loading... I think there's a bug",{"value":137,"source":50,"evidence":138},"The term serverless is misleading",[139,143],{"id":140,"by":141,"text":142},"18727002","lucb1e","\"serverless\" is really the misnomer of the year.",{"id":144,"by":141,"text":145},"18732748","I hope this one won't stick. I never call it serverless because it doesn't make any sense to me (I call it \"shared hosting\", the term everyone already knows). Then, by pointing…",[147,151],{"value":148,"source":50,"evidence":149},"Cost estimate at some traffic level",[150],{"id":62,"by":63,"text":64},{"value":152,"source":50,"evidence":153},"Explain what Cube.js does in the pipeline",[154,157],{"id":155,"by":77,"text":156},"18728607","Please explain what is cube.js doing in this? I mean, what exactly cubejs does.",{"id":80,"by":77,"text":81},[159,164],{"value":160,"source":50,"evidence":161},"Why use Cube.js when Athena can be queried directly",[162,163],{"id":80,"by":77,"text":81},{"id":76,"by":77,"text":78},{"value":165,"source":50,"evidence":166},"Why not use S3 access logs or Fastly instead",[167,170],{"id":168,"by":77,"text":169},"18726999","Is fastly free? Why would they use fastly and not s3?",{"id":171,"by":54,"text":172},"18726882","I’ve seen folks put their pixel endpoint behind Fastly and process the access log delivered in S3. A Fastly VCL can handle the same transform that this Lambda is doing.",[174,181,188],{"value":175,"source":50,"evidence":176},"Snowplow",[177],{"id":178,"by":179,"text":180},"18729966","manigandham","Side note: If you want to build your own mid-size event analytics data pipeline, then I recommend looking at snowplow: https:\u002F\u002Fgithub.com\u002Fsnowplow\u002Fsnowplow",{"value":182,"source":50,"evidence":183},"Google Analytics",[184],{"id":185,"by":186,"text":187},"18727324","tyingq","Genuine question. What does this do that just inserting vanilla GA code in the page doesn't? Trying to understand the \"why\".",{"value":189,"source":50,"evidence":190},"BigQuery-based GA clone",[191,192],{"id":101,"by":102,"text":103},{"id":193,"by":194,"text":195},"18726634","jimktrains2","Interesting. I once built a ga clone using appengine, cloud dataflow, and big query. I guess that would count as serverless? Benchmarked it against the official dumps to big quey…",{"comments":33,"answered":33,"key":197},[],{"commenters":199,"max_depth":34,"maker_replies":33,"first_comment_mins":200,"lifespan_hours":201},30,112,56,[203,205,208,211,214,217,220,223,227,229,231,233,235,239,240,241,244,247,249,252,254,256,258,260,264,265,266,267,270,271,275,280,283,286,288,291,293,296,298,300,302,305,306,310,312,314,316],[140,33,33,204,141,33],"commenter\u002Fneutral\u002Fnone",[206,33,33,204,207,33],"18727551","gpantazes",[209,33,33,204,210,33],"18727687","dna_polymerase",[212,33,33,204,213,33],"18728874","ovao",[215,33,33,204,216,33],"18730157","agret",[218,33,33,204,219,33],"18728428","mikejulietbravo",[221,33,33,204,222,33],"18728585","buster",[224,33,38,225,226,33],"18731945","project\u002Fcritical\u002Fidea","bobx11",[144,33,33,228,141,33],"other\u002Fneutral\u002Fnone",[230,33,33,228,194,33],"18736075",[232,33,33,228,77,33],"18743054",[101,38,34,234,102,33],"maker\u002Fpositive\u002Fnone",[236,39,45,237,238,33],"18727400","project\u002Fneutral\u002Fnone","rmccue",[116,45,38,225,117,33],[126,45,33,204,127,33],[242,45,33,204,243,33],"18727902","eli",[245,45,33,204,246,33],"18727920","mayank",[248,45,33,204,117,33],"18728969",[250,45,33,204,251,33],"18729152","cosmie",[253,45,33,204,117,33],"18736284",[255,45,33,204,179,33],"18729818",[108,31,34,257,109,33],"project\u002Fpositive\u002Fidea",[62,34,45,259,63,33],"project\u002Fneutral\u002Fpricing",[261,34,34,262,263,33],"18726711","project\u002Fpositive\u002Fnone","yahelc",[171,34,45,237,54,33],[168,34,45,237,77,33],[66,34,45,259,54,33],[268,34,45,237,269,33],"18727204","mrkurt",[76,34,45,237,77,33],[272,273,33,228,274,33],"18731572",6,"westoque",[276,277,45,278,279,33],"18727251",7,"project\u002Fneutral\u002Fdesign","jimmychangas",[281,277,45,237,282,33],"18727389","k__",[123,284,38,285,54,33],8,"project\u002Fcritical\u002Fexecution",[178,287,45,237,179,33],9,[193,289,34,290,194,33],10,"project\u002Fpositive\u002Fexecution",[292,289,33,204,91,33],"18726707",[294,289,38,295,77,33],"18726992","project\u002Fcritical\u002Fperformance",[297,289,33,204,251,33],"18727140",[299,289,33,204,194,33],"18727786",[133,301,38,285,134,33],11,[185,303,45,304,186,33],12,"project\u002Fneutral\u002Fidea",[53,303,45,304,54,33],[307,308,33,228,309,33],"18729543",13,"graphememes",[155,311,45,237,77,33],14,[90,311,45,313,91,33],"maker\u002Fneutral\u002Fnone",[80,311,45,315,77,33],"project\u002Fneutral\u002Fexecution",[317,311,45,318,91,33],"18729255","maker\u002Fneutral\u002Fexecution",[],[321,326,331,335,340,345],{"id":322,"name":323,"points":324,"category":325},"18738275","curves",341,"creative",{"id":327,"name":328,"points":329,"category":330},"18755782","Wiv.js",265,"languages",{"id":332,"name":333,"points":334,"category":330},"18750561","Magic Grid",167,{"id":336,"name":337,"points":338,"category":339},"18765482","Notable",124,"productivity",{"id":341,"name":342,"points":343,"category":344},"18754010","Inside Python Dict",111,"learning_science",{"id":346,"name":347,"points":348,"category":330},"18761359","lambdatalk FFT",100,false,"v2",{"id":352,"name":5,"line":6,"ai":349,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":353,"top":18,"kw":354,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":355,"url":9,"mix":356,"praise":98,"objection":113,"sub":21},18725485,0.02,[21,24,25,26,27],"0000001000510000005353333033150100130333",[31,32,33,34],1793990983548]