previous post. Each query is logged when it is submitted and when it finishes. When a Presto cluster crashes, we will have query submitted events without corresponding query finished events. These events enable us to capture the effect of cluster crashes over time.\n\nEach Presto cluster at Pinterest has workers on a mix of dedicated AWS EC2 instances and Kubernetes pods. Kubernetes platform provides us with the capability to add and remove workers from a Presto cluster very quickly. The best-case latency on bringing up a new worker on Kubernetes is less than a minute. However, when the Kubernetes cluster itself is out of resources and needs to scale up, it can take up to ten minutes. Some other advantages of deploying on Kubernetes platform is that our Presto deployment becomes agnostic of cloud vendor, instance types, OS, etc.\n\n#BigData #AWS #DataScience #DataEngineering ","private":false,"topics":[{"type":"id","generated":true,"id":"StackDecision:103207251043472057.topics.0","typename":"Topic"},{"type":"id","generated":true,"id":"StackDecision:103207251043472057.topics.1","typename":"Topic"},{"type":"id","generated":true,"id":"StackDecision:103207251043472057.topics.2","typename":"Topic"},{"type":"id","generated":true,"id":"StackDecision:103207251043472057.topics.3","typename":"Topic"}],"upvotesCount":38,"user":{"type":"id","generated":false,"id":"User:103065467604707715","typename":"User"},"viewCount":3300587,"stack":null,"services":[{"type":"id","generated":false,"id":"Tool:101231774217017036","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774501522052","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773405612798","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773409399220","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773865214260","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774206661614","typename":"Tool"}],"publicId":"103207251043472057","rawContent":"To provide employees with the critical need of interactive querying, weâve worked with @{Presto}|tool:2606|, an open-source distributed SQL query engine, over the years. Operating Presto at Pinterestâs scale has involved resolving quite a few challenges like, supporting deeply nested and huge thrift schemas, slow/ bad worker detection and remediation, auto-scaling cluster, graceful cluster shutdown and impersonation support for ldap authenticator.\n\nOur infrastructure is built on top of @{Amazon EC2}|tool:18| and we leverage @{Amazon S3}|tool:25| for storing our data. This separates compute and storage layers, and allows multiple compute clusters to share the S3 data.\n\nWe have hundreds of petabytes of data and tens of thousands of @{Apache Hive}|tool:1911| tables. Our Presto clusters are comprised of a fleet of 450 r4.8xl EC2 instances. Presto clusters together have over 100 TBs of memory and 14K vcpu cores. Within Pinterest, we have close to more than 1,000 monthly active users (out of total 1,600+ Pinterest employees) using Presto, who run about 400K queries on these clusters per month.\n\nEach query submitted to Presto cluster is logged to a @{Kafka}|tool:1063| topic via Singer. Singer is a logging agent built at Pinterest and we talked about it in a [previous post](https://medium.com/pinterest-engineering/scalable-and-reliable-data-ingestion-at-pinterest-b921c2ee8754). Each query is logged when it is submitted and when it finishes. When a Presto cluster crashes, we will have query submitted events without corresponding query finished events. These events enable us to capture the effect of cluster crashes over time.\n\nEach Presto cluster at Pinterest has workers on a mix of dedicated AWS EC2 instances and @{Kubernetes}|tool:1885| pods. Kubernetes platform provides us with the capability to add and remove workers from a Presto cluster very quickly. The best-case latency on bringing up a new worker on Kubernetes is less than a minute. However, when the Kubernetes cluster itself is out of resources and needs to scale up, it can take up to ten minutes. Some other advantages of deploying on Kubernetes platform is that our Presto deployment becomes agnostic of cloud vendor, instance types, OS, etc.\n\n@{#BigData}|topic:672| @{#AWS}|topic:421| @{#DataScience}|topic:674| @{#DataEngineering}|topic:1585| ","publishedAt":"2019-11-27T01:21:12Z","commentsCount":1,"upvoted":false,"flagged":false,"bookmarked":false,"draft":false,"createdAt":"2019-11-27T01:21:13Z","decisionType":"freeform","showAutoGeneratedTag":false,"permissions":{"type":"id","generated":true,"id":"$StackDecision:103207251043472057.permissions","typename":"Permissions"},"subjectTools":[{"type":"id","generated":false,"id":"Tool:101231773409399220","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774217017036","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774501522052","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774206661614","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773405612798","typename":"Tool"}],"fromTools":[],"toTools":[],"deleted":false,"link":{"type":"id","generated":true,"id":"$StackDecision:103207251043472057.link","typename":"Link"},"company":{"type":"id","generated":false,"id":"Company:101231709530029071","typename":"Company"},"rootComments":[{"type":"id","generated":false,"id":"Comment:103558177271786892","typename":"Comment"}],"__typename":"StackDecision"},"StackDecision:103207251043472057.topics.0":{"name":"DataScience","__typename":"Topic"},"StackDecision:103207251043472057.topics.1":{"name":"DataEngineering","__typename":"Topic"},"StackDecision:103207251043472057.topics.2":{"name":"AWS","__typename":"Topic"},"StackDecision:103207251043472057.topics.3":{"name":"BigData","__typename":"Topic"},"User:103065467604707715":{"id":"103065467604707715","username":"SinghAsDev","imageUrl":"https://img.stackshare.io/user/316861/default_820b90aa6cea6df9a57a5d0cae91bf79fc99eaef.png","displayName":"Ashish Singh","title":"Tech Lead, Big Data Platform","companyName":"Pinterest","__typename":"User","path":"/SinghAsDev"},"Tool:101231774217017036":{"id":"101231774217017036","name":"Apache Hive","imageUrl":"https://img.stackshare.io/service/1911/27eb4217dfd5cb2d579cb56bbcc7b290_400x400.jpeg","__typename":"Tool","slug":"apache-hive","title":"Data Warehouse Software for Reading, Writing, and Managing Large Datasets","verified":false,"canonicalUrl":"/apache-hive","path":"/apache-hive","votes":0,"fans":622,"stacks":478,"followingTool":false,"followContext":null,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231774501522052":{"id":"101231774501522052","name":"Presto","imageUrl":"https://img.stackshare.io/service/2606/default_9c42299fc673a12eed0ad20cb7f5c1fd4ef5c80f.png","__typename":"Tool","slug":"presto","title":"Distributed SQL Query Engine for Big Data","verified":true,"canonicalUrl":"/presto","path":"/presto","votes":66,"fans":1130,"stacks":394,"followingTool":false,"followContext":null,"following":false,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231773405612798":{"id":"101231773405612798","name":"Amazon EC2","imageUrl":"https://img.stackshare.io/service/18/amazon-ec2.png","__typename":"Tool","slug":"amazon-ec2","title":"Scalable, pay-as-you-go compute capacity in the cloud","verified":false,"canonicalUrl":"/amazon-ec2","path":"/amazon-ec2","votes":2548,"fans":43267,"stacks":48255,"followingTool":false,"followContext":null,"following":false,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231773409399220":{"id":"101231773409399220","name":"Amazon S3","imageUrl":"https://img.stackshare.io/service/25/amazon-s3.png","__typename":"Tool","slug":"amazon-s3","title":"Store and retrieve any amount of data, at any time, from anywhere on the web","verified":false,"canonicalUrl":"/amazon-s3","path":"/amazon-s3","votes":2041,"fans":47914,"stacks":53234,"followingTool":false,"followContext":null,"following":false,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231773865214260":{"id":"101231773865214260","name":"Kafka","imageUrl":"https://img.stackshare.io/service/1063/kazUJooF_400x400.jpg","__typename":"Tool","slug":"kafka","title":"Distributed, fault tolerant, high throughput pub-sub messaging system","verified":false,"canonicalUrl":"/kafka","path":"/kafka","votes":607,"fans":25916,"stacks":23542,"followingTool":false,"followContext":null,"following":false,"layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231774206661614":{"id":"101231774206661614","name":"Kubernetes","imageUrl":"https://img.stackshare.io/service/1885/21_d3cvM.png","__typename":"Tool","slug":"kubernetes","title":"Manage a cluster of Linux containers as a single system to accelerate Dev and simplify Ops","verified":false,"canonicalUrl":"/kubernetes","path":"/kubernetes","votes":681,"fans":60259,"stacks":59864,"followingTool":false,"followContext":null,"following":false,"layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"}},"$StackDecision:103207251043472057.permissions":{"edit":false,"delete":false,"__typename":"Permissions"},"$StackDecision:103207251043472057.link":{"url":"https://medium.com/pinterest-engineering/presto-at-pinterest-a8bda7515e52","title":"Presto at Pinterest - Pinterest Engineering Blog - Medium","imageUrl":"https://cdn-images-1.medium.com/fit/c/152/152/1*8I-HPL0bfoIzGied-dzOvA.png","__typename":"Link"},"Comment:103558177271786892":{"id":"103558177271786892","content":"ECS on AWS will reduce your cost on EC2 and Kubernetes. Athena may be another tool for reducing your cost by replacing the Presto. It takes advantage of the S3 as the storage and provided the serverless management for your infrastructure.","postedAt":"2020-01-28T00:46:22Z","upvoted":false,"flagged":false,"upvotesCount":0,"parentId":null,"user":{"type":"id","generated":false,"id":"User:103509522969403273","typename":"User"},"__typename":"Comment","replies":[]},"User:103509522969403273":{"id":"103509522969403273","path":"/kaibohao6177","imageUrl":"https://img.stackshare.io/user/352187/default_8e2b17aa485d450bacf5ad7208c981f618d182d0.jpg","displayName":"Kaibo Hao","__typename":"User"},"$Company:101231709530029071.stackDecisions({\"after\":null,\"first\":4}).edges.1":{"node":{"type":"id","generated":false,"id":"StackDecision:103207251043472057","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"$StackDecision:108121854838476665.answers({\"first\":2})":{"count":0,"pageInfo":{"type":"id","generated":true,"id":"$StackDecision:108121854838476665.answers({\"first\":2}).pageInfo","typename":"PageInfo"},"edges":[],"__typename":"StackDecisionConnection"},"$StackDecision:108121854838476665.answers({\"first\":2}).pageInfo":{"hasNextPage":false,"endCursor":null,"__typename":"PageInfo"},"StackDecision:108121854838476665":{"answers({\"first\":2})":{"type":"id","generated":true,"id":"$StackDecision:108121854838476665.answers({\"first\":2})","typename":"StackDecisionConnection"},"id":"108121854838476665","htmlContent":"Security team builds services, solutions and tools for teams within Pinterest to manage accesses of critical production resources as well as facilitate adding authentication, authorization and accounting within critical production micro-services. Issuing identities to > 130k AWS EC2 instances, using them to make authentication and authorization decisions high bandwidth critical traffic flow conditions while services communicate in a mesh, requires a great deal of performance and stability. GoLang provides exactly that. Also primary engineering skills in Security team need not to be fully familiar with complex programming logic requires in Java/Kotlin while avoiding the pitfalls on runtime failures or uncertain behavior using Python in production leads us to GoLang","private":false,"topics":[],"upvotesCount":10,"user":{"type":"id","generated":false,"id":"User:104442313103088788","typename":"User"},"viewCount":1392856,"stack":null,"services":[],"publicId":"108121854838476665","rawContent":"Security team builds services, solutions and tools for teams within Pinterest to manage accesses of critical production resources as well as facilitate adding authentication, authorization and accounting within critical production micro-services. Issuing identities to > 130k AWS EC2 instances, using them to make authentication and authorization decisions high bandwidth critical traffic flow conditions while services communicate in a mesh, requires a great deal of performance and stability. GoLang provides exactly that. Also primary engineering skills in Security team need not to be fully familiar with complex programming logic requires in Java/Kotlin while avoiding the pitfalls on runtime failures or uncertain behavior using Python in production leads us to GoLang","publishedAt":"2022-04-13T00:09:36Z","commentsCount":0,"upvoted":false,"flagged":false,"bookmarked":false,"draft":false,"createdAt":"2022-04-13T00:09:36Z","decisionType":"tool","showAutoGeneratedTag":false,"permissions":{"type":"id","generated":true,"id":"$StackDecision:108121854838476665.permissions","typename":"Permissions"},"subjectTools":[{"type":"id","generated":false,"id":"Tool:101231773842107538","typename":"Tool"}],"fromTools":[],"toTools":[{"type":"id","generated":false,"id":"Tool:101231773842107538","typename":"Tool"}],"deleted":false,"link":null,"company":{"type":"id","generated":false,"id":"Company:101231709530029071","typename":"Company"},"rootComments":[],"__typename":"StackDecision"},"User:104442313103088788":{"id":"104442313103088788","username":"jigarshah2811","imageUrl":"https://img.stackshare.io/user/650008/default_245cf50fc331c627b07cfe006d19cd82acaa5da3.jpeg","displayName":"Jigar Shah","title":"Security Software Engineer","companyName":"Pinterest","__typename":"User","path":"/jigarshah2811"},"$StackDecision:108121854838476665.permissions":{"edit":false,"delete":false,"__typename":"Permissions"},"Tool:101231773842107538":{"id":"101231773842107538","name":"Golang","slug":"golang","title":"An open source programming language that makes it easy to build simple, reliable, and efficient software","verified":true,"imageUrl":"https://img.stackshare.io/service/1005/O6AczwfV_400x400.png","canonicalUrl":"/golang","path":"/golang","votes":3296,"fans":17040,"stacks":22471,"followingTool":false,"followContext":null,"__typename":"Tool","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"$Company:101231709530029071.stackDecisions({\"after\":null,\"first\":4}).edges.2":{"node":{"type":"id","generated":false,"id":"StackDecision:108121854838476665","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"$StackDecision:108121871893779302.answers({\"first\":2})":{"count":0,"pageInfo":{"type":"id","generated":true,"id":"$StackDecision:108121871893779302.answers({\"first\":2}).pageInfo","typename":"PageInfo"},"edges":[],"__typename":"StackDecisionConnection"},"$StackDecision:108121871893779302.answers({\"first\":2}).pageInfo":{"hasNextPage":false,"endCursor":null,"__typename":"PageInfo"},"StackDecision:108121871893779302":{"answers({\"first\":2})":{"type":"id","generated":true,"id":"$StackDecision:108121871893779302.answers({\"first\":2})","typename":"StackDecisionConnection"},"id":"108121871893779302","htmlContent":"
A consistent plane across teams at Pinterest to achieve deploy orchestration using EC2 APIs underneath. ","private":false,"topics":[],"upvotesCount":2,"user":{"type":"id","generated":false,"id":"User:104442313103088788","typename":"User"},"viewCount":1363236,"stack":null,"services":[],"publicId":"108121871893779302","rawContent":"A consistent plane across teams at Pinterest to achieve deploy orchestration using EC2 APIs underneath. ","publishedAt":"2022-04-13T00:13:56Z","commentsCount":0,"upvoted":false,"flagged":false,"bookmarked":false,"draft":false,"createdAt":"2022-04-13T00:13:56Z","decisionType":"tool","showAutoGeneratedTag":false,"permissions":{"type":"id","generated":true,"id":"$StackDecision:108121871893779302.permissions","typename":"Permissions"},"subjectTools":[{"type":"id","generated":false,"id":"Tool:101231775589968477","typename":"Tool"}],"fromTools":[],"toTools":[{"type":"id","generated":false,"id":"Tool:101231775589968477","typename":"Tool"}],"deleted":false,"link":null,"company":{"type":"id","generated":false,"id":"Company:101231709530029071","typename":"Company"},"rootComments":[],"__typename":"StackDecision"},"$StackDecision:108121871893779302.permissions":{"edit":false,"delete":false,"__typename":"Permissions"},"Tool:101231775589968477":{"id":"101231775589968477","name":"Teletraan","slug":"teletraan","title":"Pinterest's deploy system","verified":false,"imageUrl":"https://img.stackshare.io/service/4505/O4VCmrY5.png","canonicalUrl":"/teletraan","path":"/teletraan","votes":0,"fans":25,"stacks":6,"followingTool":false,"followContext":null,"__typename":"Tool","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"}},"$Company:101231709530029071.stackDecisions({\"after\":null,\"first\":4}).edges.3":{"node":{"type":"id","generated":false,"id":"StackDecision:108121871893779302","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"$Company:101231709530029071.stackDecisions({\"after\":null,\"first\":4}).pageInfo":{"endCursor":"NA","hasNextPage":true,"__typename":"PageInfo"},"$Company:101231709530029071.jobs({\"after\":null,\"first\":4})":{"count":61,"edges":[{"type":"id","generated":true,"id":"$Company:101231709530029071.jobs({\"after\":null,\"first\":4}).edges.0","typename":"JobEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.jobs({\"after\":null,\"first\":4}).edges.1","typename":"JobEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.jobs({\"after\":null,\"first\":4}).edges.2","typename":"JobEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.jobs({\"after\":null,\"first\":4}).edges.3","typename":"JobEdge"}],"pageInfo":{"type":"id","generated":true,"id":"$Company:101231709530029071.jobs({\"after\":null,\"first\":4}).pageInfo","typename":"PageInfo"},"__typename":"JobConnection"},"Job:112019375116432412":{"id":"112019375116432412","angellistJobUrl":"https://www.pinterestcareers.com/job-form?gh_jid=5773689","title":"Android Engineer","location":"Toronto, ON, CA","private":false,"services":[{"type":"id","generated":false,"id":"Tool:107846281190496441","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775176212882","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773844705754","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773838011785","typename":"Tool"}],"__typename":"Job"},"Tool:107846281190496441":{"id":"107846281190496441","name":"Dream","slug":"dream-framework","title":"Tidy, feature-complete Web framework","verified":false,"imageUrl":"https://img.stackshare.io/service/40514/default_c19d22a0eb52861815d6674d4209c48b26039df7.png","canonicalUrl":"/dream-framework","path":"/dream-framework","votes":0,"fans":8,"stacks":4,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231775176212882":{"id":"101231775176212882","name":"Kotlin","slug":"kotlin","title":"Statically typed Programming Language targeting JVM and JavaScript","verified":true,"imageUrl":"https://img.stackshare.io/service/3750/pCfEzr6L.png","canonicalUrl":"/kotlin","path":"/kotlin","votes":647,"fans":13700,"stacks":15304,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773844705754":{"id":"101231773844705754","name":"Android SDK","slug":"android","title":"An SDK that provides you the API libraries and developer tools necessary to build, test, and debug apps for Android.","verified":false,"imageUrl":"https://img.stackshare.io/service/1010/m8jf0po4imu8t5eemjdd.png","canonicalUrl":"/android","path":"/android","votes":799,"fans":24895,"stacks":26957,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773838011785":{"id":"101231773838011785","name":"Java","slug":"java","title":"A concurrent, class-based, object-oriented, language specifically designed to have as few implementation dependencies as possible","verified":false,"imageUrl":"https://img.stackshare.io/service/995/K85ZWV2F.png","canonicalUrl":"/java","path":"/java","votes":3710,"fans":118490,"stacks":135225,"following":false,"followContext":null,"__typename":"Tool","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"$Company:101231709530029071.jobs({\"after\":null,\"first\":4}).edges.0":{"node":{"type":"id","generated":false,"id":"Job:112019375116432412","typename":"Job"},"__typename":"JobEdge"},"Job:111900467298057577":{"id":"111900467298057577","angellistJobUrl":"https://www.pinterestcareers.com/job-form?gh_jid=5526629","title":"Android Engineer","location":"Dublin, IE","private":false,"services":[{"type":"id","generated":false,"id":"Tool:107846281190496441","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773844705754","typename":"Tool"}],"__typename":"Job"},"$Company:101231709530029071.jobs({\"after\":null,\"first\":4}).edges.1":{"node":{"type":"id","generated":false,"id":"Job:111900467298057577","typename":"Job"},"__typename":"JobEdge"},"Job:111583377576885901":{"id":"111583377576885901","angellistJobUrl":"https://www.pinterestcareers.com/job-form?gh_jid=4916795","title":"Android Software Engineer, Core and Monetization","location":"San Francisco, CA, US; , CA, US","private":false,"services":[{"type":"id","generated":false,"id":"Tool:107846281190496441","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775176212882","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773844705754","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773838011785","typename":"Tool"}],"__typename":"Job"},"$Company:101231709530029071.jobs({\"after\":null,\"first\":4}).edges.2":{"node":{"type":"id","generated":false,"id":"Job:111583377576885901","typename":"Job"},"__typename":"JobEdge"},"Job:111226652187316525":{"id":"111226652187316525","angellistJobUrl":"https://www.pinterestcareers.com/job-form?gh_jid=5397956","title":"Distinguished Engineer, Frontend","location":"San Francisco, CA, US; , US","private":false,"services":[{"type":"id","generated":false,"id":"Tool:107846281190496441","typename":"Tool"}],"__typename":"Job"},"$Company:101231709530029071.jobs({\"after\":null,\"first\":4}).edges.3":{"node":{"type":"id","generated":false,"id":"Job:111226652187316525","typename":"Job"},"__typename":"JobEdge"},"$Company:101231709530029071.jobs({\"after\":null,\"first\":4}).pageInfo":{"endCursor":"NA","hasNextPage":true,"__typename":"PageInfo"},"$Company:101231709530029071.socialPosts({\"after\":null,\"first\":4})":{"count":17,"edges":[{"type":"id","generated":true,"id":"$Company:101231709530029071.socialPosts({\"after\":null,\"first\":4}).edges.0","typename":"SocialPostEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.socialPosts({\"after\":null,\"first\":4}).edges.1","typename":"SocialPostEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.socialPosts({\"after\":null,\"first\":4}).edges.2","typename":"SocialPostEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.socialPosts({\"after\":null,\"first\":4}).edges.3","typename":"SocialPostEdge"}],"pageInfo":{"type":"id","generated":true,"id":"$Company:101231709530029071.socialPosts({\"after\":null,\"first\":4}).pageInfo","typename":"PageInfo"},"__typename":"SocialPostConnection"},"SocialPost:103007541261252485":{"id":"103007541261252485","private":false,"postType":"youtube","outboundUrl":"https://www.youtube.com/watch?v=qTfeWt95EmQ","details":{"type":"json","json":{"title":"Recommending 4+ Billion Ideas to 250+ Million Users in Real Time","description":"by Pong Eksombatchai\n\nOne of the primary engineering challenges at Pinterest is how to help people discover ideas they want to try, which means serving the right idea to the right person at the right time. While most other recommender systems have a small pool of possible candidates (like 100,000 film titles on a movie review site), Pinterest has to recommend from a catalog of more than 4+ billion ideas. To make it happen, we built Pixie, a flexible, graph-based system for making personalized recommendations in real-time.\n\nhttp://about.pinterest.com/\n\niTunes App Store: http://pin.it/VQ-xmlR\nGoogle Play: http://pin.it/bEYNSEA","views":6593,"thumbnail_url":"https://i.ytimg.com/vi/qTfeWt95EmQ/hqdefault.jpg"}},"publishedAt":"2018-11-09T22:07:49Z","status":"complete","services":[],"__typename":"SocialPost"},"$Company:101231709530029071.socialPosts({\"after\":null,\"first\":4}).edges.0":{"node":{"type":"id","generated":false,"id":"SocialPost:103007541261252485","typename":"SocialPost"},"__typename":"SocialPostEdge"},"SocialPost:103007540824435769":{"id":"103007540824435769","private":false,"postType":"youtube","outboundUrl":"https://www.youtube.com/watch?v=ARLBQaog1lw","details":{"type":"json","json":{"title":"Machine Learning For Feed Ranking","description":"by Ekrem Kocaguneli\n\nWelcome to Pinterestâs home-sweet-Home Feed. Ekrem starts by giving you the ins and outs of how Pinterestâs highly personalized Home Feed works, then explains how we use machine learning techniques to rank the Pins you find there and fully personalize the experience.â\n\nhttp://about.pinterest.com/\n\niTunes App Store: http://pin.it/VQ-xmlR\nGoogle Play: http://pin.it/bEYNSEA","views":11563,"thumbnail_url":"https://i.ytimg.com/vi/ARLBQaog1lw/hqdefault.jpg"}},"publishedAt":"2018-11-09T22:14:11Z","status":"complete","services":[],"__typename":"SocialPost"},"$Company:101231709530029071.socialPosts({\"after\":null,\"first\":4}).edges.1":{"node":{"type":"id","generated":false,"id":"SocialPost:103007540824435769","typename":"SocialPost"},"__typename":"SocialPostEdge"},"SocialPost:103007540404140978":{"id":"103007540404140978","private":false,"postType":"youtube","outboundUrl":"https://www.youtube.com/watch?v=R5R2dq13iAc","details":{"type":"json","json":{"title":"Building Data Products and Tools","description":"by Justin Mejorada-Pier & Charlie Gu\n\nIn this talk, Justin and Charlie run through the challenges they faced while building in-house tools like DataHub (the primary way people run queries and mine data here at Pinterest). Tune in as they share the hard-won learnings they picked up along the way.\n\nhttp://about.pinterest.com/\n\niTunes App Store: http://pin.it/VQ-xmlR\nGoogle Play: http://pin.it/bEYNSEA","views":2389,"thumbnail_url":"https://i.ytimg.com/vi/R5R2dq13iAc/hqdefault.jpg"}},"publishedAt":"2018-11-09T22:03:59Z","status":"complete","services":[],"__typename":"SocialPost"},"$Company:101231709530029071.socialPosts({\"after\":null,\"first\":4}).edges.2":{"node":{"type":"id","generated":false,"id":"SocialPost:103007540404140978","typename":"SocialPost"},"__typename":"SocialPostEdge"},"SocialPost:103007539903848324":{"id":"103007539903848324","private":false,"postType":"youtube","outboundUrl":"https://www.youtube.com/watch?v=hN995d7g4us","details":{"type":"json","json":{"title":"Evolution of a Real World Recommender System","description":"by Jenny Liu\n\nLearn how we built the web-scale recommender system that powers over 40% of user engagement on Pinterest. Jenny will discuss how the small but mighty team prioritized the simplest and highest-leverage solutions. Sheâll also give a rundown of the many challenges and learnings that came up in the evolution of candidate generation, Memboost and ranking in our system.â\n\nhttp://about.pinterest.com/\n\niTunes App Store: http://pin.it/VQ-xmlR\nGoogle Play: http://pin.it/bEYNSEA","views":2538,"thumbnail_url":"https://i.ytimg.com/vi/hN995d7g4us/hqdefault.jpg"}},"publishedAt":"2018-11-09T22:04:31Z","status":"complete","services":[],"__typename":"SocialPost"},"$Company:101231709530029071.socialPosts({\"after\":null,\"first\":4}).edges.3":{"node":{"type":"id","generated":false,"id":"SocialPost:103007539903848324","typename":"SocialPost"},"__typename":"SocialPostEdge"},"$Company:101231709530029071.socialPosts({\"after\":null,\"first\":4}).pageInfo":{"endCursor":"NA","hasNextPage":true,"__typename":"PageInfo"},"$Company:101231709530029071.githubRepos({\"after\":null,\"first\":4})":{"count":72,"edges":[{"type":"id","generated":true,"id":"$Company:101231709530029071.githubRepos({\"after\":null,\"first\":4}).edges.0","typename":"GithubRepoEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.githubRepos({\"after\":null,\"first\":4}).edges.1","typename":"GithubRepoEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.githubRepos({\"after\":null,\"first\":4}).edges.2","typename":"GithubRepoEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.githubRepos({\"after\":null,\"first\":4}).edges.3","typename":"GithubRepoEdge"}],"pageInfo":{"type":"id","generated":true,"id":"$Company:101231709530029071.githubRepos({\"after\":null,\"first\":4}).pageInfo","typename":"PageInfo"},"__typename":"GithubRepoConnection"},"GithubRepo:111142150694682594":{"id":"111142150694682594","url":"https://github.com/pinterest/psc","name":"psc","description":"PubSubClient (PSC) ","stars":3,"forks":0,"services":[{"type":"id","generated":false,"id":"Tool:101231773838011785","typename":"Tool"}],"__typename":"GithubRepo"},"$Company:101231709530029071.githubRepos({\"after\":null,\"first\":4}).edges.0":{"node":{"type":"id","generated":false,"id":"GithubRepo:111142150694682594","typename":"GithubRepo"},"__typename":"GithubRepoEdge"},"GithubRepo:110786407029486720":{"id":"110786407029486720","url":"https://github.com/pinterest/Pinterest-Salesforce-Commerce-Cartridge","name":"Pinterest-Salesforce-Commerce-Cartridge","description":null,"stars":0,"forks":0,"services":[{"type":"id","generated":false,"id":"Tool:104562220875336242","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773939333405","typename":"Tool"}],"__typename":"GithubRepo"},"Tool:104562220875336242":{"id":"104562220875336242","name":"Salesforce","slug":"salesforce","title":"Connect to your customers in a whole new way","verified":false,"imageUrl":"https://img.stackshare.io/service/12695/D78-IV9i_400x400.jpg","canonicalUrl":"/salesforce","path":"/salesforce","votes":0,"fans":748,"stacks":792,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773939333405":{"id":"101231773939333405","name":"JavaScript","slug":"javascript","title":"Lightweight, interpreted, object-oriented language with first-class functions","verified":false,"imageUrl":"https://img.stackshare.io/service/1209/javascript.jpeg","canonicalUrl":"/javascript","path":"/javascript","votes":8072,"fans":312832,"stacks":360933,"following":false,"followContext":null,"__typename":"Tool","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"$Company:101231709530029071.githubRepos({\"after\":null,\"first\":4}).edges.1":{"node":{"type":"id","generated":false,"id":"GithubRepo:110786407029486720","typename":"GithubRepo"},"__typename":"GithubRepoEdge"},"GithubRepo:110197526326945083":{"id":"110197526326945083","url":"https://github.com/pinterest/transformer_user_action","name":"transformer_user_action","description":"Transformer-based Realtime User Action Model for Recommendation at Pinterest","stars":1,"forks":0,"services":[{"type":"id","generated":false,"id":"Tool:101231773837179153","typename":"Tool"}],"__typename":"GithubRepo"},"$Company:101231709530029071.githubRepos({\"after\":null,\"first\":4}).edges.2":{"node":{"type":"id","generated":false,"id":"GithubRepo:110197526326945083","typename":"GithubRepo"},"__typename":"GithubRepoEdge"},"GithubRepo:110282461120603242":{"id":"110282461120603242","url":"https://github.com/pinterest/pinterest-magento2-extension","name":"pinterest-magento2-extension","description":null,"stars":0,"forks":0,"services":[{"type":"id","generated":false,"id":"Tool:101231773836410122","typename":"Tool"}],"__typename":"GithubRepo"},"Tool:101231773836410122":{"id":"101231773836410122","name":"PHP","slug":"php","title":"A popular general-purpose scripting language that is especially suited to web development","verified":false,"imageUrl":"https://img.stackshare.io/service/991/hwUcGZ41_400x400.jpg","canonicalUrl":"/php","path":"/php","votes":4622,"fans":95328,"stacks":144362,"following":false,"followContext":null,"__typename":"Tool"},"$Company:101231709530029071.githubRepos({\"after\":null,\"first\":4}).edges.3":{"node":{"type":"id","generated":false,"id":"GithubRepo:110282461120603242","typename":"GithubRepo"},"__typename":"GithubRepoEdge"},"$Company:101231709530029071.githubRepos({\"after\":null,\"first\":4}).pageInfo":{"endCursor":"NA","hasNextPage":true,"__typename":"PageInfo"},"$Company:101231709530029071.blogPosts({\"after\":null,\"first\":4})":{"count":238,"edges":[{"type":"id","generated":true,"id":"$Company:101231709530029071.blogPosts({\"after\":null,\"first\":4}).edges.0","typename":"BlogPostEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.blogPosts({\"after\":null,\"first\":4}).edges.1","typename":"BlogPostEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.blogPosts({\"after\":null,\"first\":4}).edges.2","typename":"BlogPostEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.blogPosts({\"after\":null,\"first\":4}).edges.3","typename":"BlogPostEdge"}],"pageInfo":{"type":"id","generated":true,"id":"$Company:101231709530029071.blogPosts({\"after\":null,\"first\":4}).pageInfo","typename":"PageInfo"},"__typename":"BlogPostConnection"},"BlogPost:111712522251892094":{"id":"111712522251892094","imageUrl":"https://miro.medium.com/v2/da:true/resize:fit:834/0*b3gyyHWpBT2OCucC","url":"https://medium.com/pinterest-engineering/building-pinterests-new-wide-column-database-using-rocksdb-f5277ee4e3d2?source=rss-ef81ef829bcb------2","title":"Building Pinterestâs new wide column database using RocksDB","author":"Pinterest Engineering","publishedAt":"2024-01-04T20:19:31Z","services":[{"type":"id","generated":false,"id":"Tool:109703021622820320","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:105826250651704644","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:105780043448882027","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:103871936711463539","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:103686234022036141","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101476050151367852","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774501522052","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773857055849","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773409399220","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773405612798","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774426337070","typename":"Tool"}],"__typename":"BlogPost"},"Tool:109703021622820320":{"id":"109703021622820320","name":"Five","slug":"fiveco","title":"Rapidly build custom business applications","verified":false,"imageUrl":"https://img.stackshare.io/service/48496/default_92b50fa853eb4993dbe6091f0fb6ad870b954e45.jpg","canonicalUrl":"/fiveco","path":"/fiveco","votes":0,"fans":7,"stacks":4,"following":false,"followContext":null,"__typename":"Tool"},"Tool:105826250651704644":{"id":"105826250651704644","name":"SST","slug":"sst","title":"A live development environment for AWS Lambda","verified":false,"imageUrl":"https://img.stackshare.io/service/25155/default_3926c3df68032ba9ceb95edfb64f30a1210dc2b5.jpg","canonicalUrl":"/sst","path":"/sst","votes":0,"fans":48,"stacks":38,"following":false,"followContext":null,"__typename":"Tool"},"Tool:105780043448882027":{"id":"105780043448882027","name":"Rows","slug":"rows","title":"The spreadsheet where teams work faster","verified":false,"imageUrl":"https://img.stackshare.io/service/25100/default_e198cc63aaefadfe5ec7c281c7f5aecbfe99b862.jpg","canonicalUrl":"/rows","path":"/rows","votes":0,"fans":8,"stacks":4,"following":false,"followContext":null,"__typename":"Tool"},"Tool:103871936711463539":{"id":"103871936711463539","name":"Simple","slug":"simple-tracker","title":"Track Time with One Click","verified":true,"imageUrl":"https://img.stackshare.io/service/11894/default_5bb2c0012a8c2666af5081e803e15952f675da0c.png","canonicalUrl":"/simple-tracker","path":"/simple-tracker","votes":6,"fans":1041,"stacks":987,"following":false,"followContext":null,"__typename":"Tool"},"Tool:103686234022036141":{"id":"103686234022036141","name":"DID","slug":"did","title":"Authentication for websites and apps that users will love","verified":false,"imageUrl":"https://img.stackshare.io/service/11796/did.png","canonicalUrl":"/did","path":"/did","votes":0,"fans":32,"stacks":20,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101476050151367852":{"id":"101476050151367852","name":"Requests","slug":"requests","title":"Elegant and simple HTTP library for Python","verified":false,"imageUrl":"https://img.stackshare.io/service/10242/default_10e3fd58c910dc0c4241bc273a7235a0aa4197dd.png","canonicalUrl":"/requests","path":"/requests","votes":0,"fans":80,"stacks":176,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773857055849":{"id":"101231773857055849","name":"HBase","slug":"hbase","title":"The Hadoop database, a distributed, scalable, big data store","verified":false,"imageUrl":"https://img.stackshare.io/service/1043/HBase-Twitter3.png","canonicalUrl":"/hbase","path":"/hbase","votes":15,"fans":596,"stacks":462,"following":false,"followContext":null,"__typename":"Tool","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"Tool:101231774426337070":{"id":"101231774426337070","name":"RocksDB","slug":"rocksdb","title":"Embeddable persistent key-value store for fast storage, developed and maintained by Facebook Database Engineering Team","verified":false,"imageUrl":"https://img.stackshare.io/service/2432/81KLTHHZ.png","canonicalUrl":"/rocksdb","path":"/rocksdb","votes":11,"fans":334,"stacks":140,"following":false,"followContext":null,"__typename":"Tool","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"$Company:101231709530029071.blogPosts({\"after\":null,\"first\":4}).edges.0":{"node":{"type":"id","generated":false,"id":"BlogPost:111712522251892094","typename":"BlogPost"},"__typename":"BlogPostEdge"},"BlogPost:111712522592751501":{"id":"111712522592751501","imageUrl":"https://miro.medium.com/v2/resize:fill:144:144/1*FNWs-r9nA_QNtBbYvUkAtg.png","url":"https://medium.com/pinterest-engineering/the-top-pinterest-engineering-blog-posts-from-2023-aa2c78f5b2fb?source=rss-ef81ef829bcb------2","title":"The Top Pinterest Engineering Blog posts from 2023","author":"Pinterest Engineering","publishedAt":"2023-12-21T14:43:08Z","services":[{"type":"id","generated":false,"id":"Tool:101231774641851090","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774206661614","typename":"Tool"}],"__typename":"BlogPost"},"Tool:101231774641851090":{"id":"101231774641851090","name":"JSON","slug":"json","title":"A lightweight data-interchange format","verified":false,"imageUrl":"https://img.stackshare.io/service/2880/1024px-JSON_vector_logo.svg.png","canonicalUrl":"/json","path":"/json","votes":9,"fans":2296,"stacks":1947,"following":false,"followContext":null,"__typename":"Tool","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"$Company:101231709530029071.blogPosts({\"after\":null,\"first\":4}).edges.1":{"node":{"type":"id","generated":false,"id":"BlogPost:111712522592751501","typename":"BlogPost"},"__typename":"BlogPostEdge"},"BlogPost:111712523631874267":{"id":"111712523631874267","imageUrl":"https://miro.medium.com/v2/da:true/resize:fit:1200/0*ks9F10M6ndPx3qZE","url":"https://medium.com/pinterest-engineering/a-glimpse-into-the-redesigned-goku-ingestor-vnext-at-pinterest-d68159473464?source=rss-ef81ef829bcb------2","title":"A Glimpse into the Redesigned Goku-Ingestor vNext at Pinterest","author":"Pinterest Engineering","publishedAt":"2023-11-28T22:18:38Z","services":[{"type":"id","generated":false,"id":"Tool:110818823175886266","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:110530229978339947","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:108322405266514059","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:107332746413715979","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:106894962281213867","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:106817070664247930","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:105909878634220634","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:103857871031154915","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:103686234022036141","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:102444176615643719","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775684122846","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774346313447","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773865214260","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773405612798","typename":"Tool"}],"__typename":"BlogPost"},"Tool:110818823175886266":{"id":"110818823175886266","name":"Continue","slug":"continue","title":"The open-source autopilot for software development","verified":false,"imageUrl":"https://img.stackshare.io/service/101970/default_4cf30d3bdd10c69eb42f37e3a5d6720ae2063000.jpg","canonicalUrl":"/continue","path":"/continue","votes":0,"fans":6,"stacks":2,"following":false,"followContext":null,"__typename":"Tool"},"Tool:110530229978339947":{"id":"110530229978339947","name":"Speed","slug":"speed","title":"Easily and securely accept payments in Bitcoin","verified":false,"imageUrl":"https://img.stackshare.io/service/101717/default_eba80e5d924c0bbb0da3ebf64f5c879130eaa34e.jpg","canonicalUrl":"/speed","path":"/speed","votes":0,"fans":8,"stacks":8,"following":false,"followContext":null,"__typename":"Tool"},"Tool:108322405266514059":{"id":"108322405266514059","name":"Infra","slug":"infra-hq","title":"Open-source access management for Kubernetes","verified":false,"imageUrl":"https://img.stackshare.io/service/40791/default_a4357de5c49d215b8aed95cbec211f1cf5885911.jpg","canonicalUrl":"/infra-hq","path":"/infra-hq","votes":0,"fans":21,"stacks":16,"following":false,"followContext":null,"__typename":"Tool"},"Tool:107332746413715979":{"id":"107332746413715979","name":"refine","slug":"refine","title":"A React-based framework for building internal tools, rapidly!","verified":true,"imageUrl":"https://img.stackshare.io/service/40224/default_f028ae34ddc37b510f6431e1cbe10440ad899b5e.jpg","canonicalUrl":"/refine","path":"/refine","votes":0,"fans":25,"stacks":19,"following":false,"followContext":null,"__typename":"Tool"},"Tool:106894962281213867":{"id":"106894962281213867","name":"Meticulous","slug":"meticulous","title":"Catch JavaScript errors before they hit production","verified":false,"imageUrl":"https://img.stackshare.io/service/39942/default_7705d05811d771bbace2ab40e2a22202d6209696.jpg","canonicalUrl":"/meticulous","path":"/meticulous","votes":0,"fans":5,"stacks":1,"following":false,"followContext":null,"__typename":"Tool"},"Tool:106817070664247930":{"id":"106817070664247930","name":"Queue","slug":"usequeue","title":"Collect visual feedback for your website in seconds","verified":false,"imageUrl":"https://img.stackshare.io/service/39896/default_42d0c2e8bd0f8244d09ae34f8c42f3ed25e1c9cb.jpg","canonicalUrl":"/usequeue","path":"/usequeue","votes":0,"fans":24,"stacks":20,"following":false,"followContext":null,"__typename":"Tool"},"Tool:105909878634220634":{"id":"105909878634220634","name":"Time Analytics","slug":"time-analytics","title":"A management tool for time and cost tracking per each project, client or working task","verified":false,"imageUrl":"https://img.stackshare.io/service/25270/default_69421923e92ed2b726f6f5d6fbebc5fdab62b76c.jpg","canonicalUrl":"/time-analytics","path":"/time-analytics","votes":0,"fans":1,"stacks":1,"following":false,"followContext":null,"__typename":"Tool"},"Tool:103857871031154915":{"id":"103857871031154915","name":"Remarkable","slug":"remarkable","title":"Markdown editor, viewer and toolkit","verified":false,"imageUrl":"https://img.stackshare.io/service/11889/no-img.png","canonicalUrl":"/remarkable","path":"/remarkable","votes":0,"fans":16,"stacks":10,"following":false,"followContext":null,"__typename":"Tool"},"Tool:102444176615643719":{"id":"102444176615643719","name":"TMetric","slug":"tmetric","title":"Empower your team with time tracking","verified":true,"imageUrl":"https://img.stackshare.io/service/11195/default_639d70e2c322158aed9d9664091a7f2278d5c777.png","canonicalUrl":"/tmetric","path":"/tmetric","votes":0,"fans":2,"stacks":3,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231775684122846":{"id":"101231775684122846","name":"Runnable","slug":"runnable","title":"Full-stack environments for every branch, and any application.","verified":true,"imageUrl":"https://img.stackshare.io/service/4689/runnable-icon.png","canonicalUrl":"/runnable","path":"/runnable","votes":0,"fans":17,"stacks":7,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231774346313447":{"id":"101231774346313447","name":"Apache Thrift","slug":"apache-thrift","title":"Software framework for scalable cross-language services development","verified":false,"imageUrl":"https://img.stackshare.io/service/2263/apache.png","canonicalUrl":"/apache-thrift","path":"/apache-thrift","votes":0,"fans":282,"stacks":177,"following":false,"followContext":null,"__typename":"Tool","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"}},"$Company:101231709530029071.blogPosts({\"after\":null,\"first\":4}).edges.2":{"node":{"type":"id","generated":false,"id":"BlogPost:111712523631874267","typename":"BlogPost"},"__typename":"BlogPostEdge"},"BlogPost:111712524601878225":{"id":"111712524601878225","imageUrl":"https://miro.medium.com/v2/da:true/resize:fit:1200/0*y4nQMWfqrsoKVsIS","url":"https://medium.com/pinterest-engineering/improving-efficiency-of-goku-time-series-database-at-pinterest-part-1-7659b94796f4?source=rss-ef81ef829bcb------2","title":"Improving Efficiency Of Goku Time Series Database at Pinterest (Partâââ1)","author":"Pinterest Engineering","publishedAt":"2023-11-22T19:20:24Z","services":[{"type":"id","generated":false,"id":"Tool:110660641995432347","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:110530229978339947","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:110300443123798522","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:109274179782119617","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:107608472495246059","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:107332856544594626","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:105826250651704644","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:105786682014152582","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:104915889126452025","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:103686234022036141","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:103328183869675762","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774426337070","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773865214260","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773409399220","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773405612798","typename":"Tool"}],"__typename":"BlogPost"},"Tool:110660641995432347":{"id":"110660641995432347","name":"Try","slug":"try-command","title":"Run a command and inspect its effects before changing your live system","verified":false,"imageUrl":"https://img.stackshare.io/service/101825/default_fee6db27033c9348cbd52a828bd0a3b0776c3ed1.png","canonicalUrl":"/try-command","path":"/try-command","votes":0,"fans":62,"stacks":59,"following":false,"followContext":null,"__typename":"Tool"},"Tool:110300443123798522":{"id":"110300443123798522","name":"Subset","slug":"subset","title":"The online collaborative spreadsheet for teams","verified":false,"imageUrl":"https://img.stackshare.io/service/49041/default_8573edd1c3f846463047011340c294709c9d3a70.jpg","canonicalUrl":"/subset","path":"/subset","votes":0,"fans":1,"stacks":1,"following":false,"followContext":null,"__typename":"Tool"},"Tool:109274179782119617":{"id":"109274179782119617","name":"Tier","slug":"tier","title":"Terraform for Stripe ","verified":true,"imageUrl":"https://img.stackshare.io/service/47971/default_07b8d6d94fc9994c7b91edfd8136959124c8288a.png","canonicalUrl":"/tier","path":"/tier","votes":0,"fans":9,"stacks":7,"following":false,"followContext":null,"__typename":"Tool"},"Tool:107608472495246059":{"id":"107608472495246059","name":"age","slug":"age","title":"A simple, modern and secure Go encryption tool","verified":false,"imageUrl":"https://img.stackshare.io/service/40373/default_d7b01785a189ee839cb857e2e2eda6a41a3f8e77.png","canonicalUrl":"/age","path":"/age","votes":0,"fans":14,"stacks":12,"following":false,"followContext":null,"__typename":"Tool"},"Tool:107332856544594626":{"id":"107332856544594626","name":"Zero","slug":"getzero","title":"Ship faster with low Code Infra for Fintech Founders","verified":false,"imageUrl":"https://img.stackshare.io/service/40226/default_fa445abb11283c6494056360726936adb9a99ffc.png","canonicalUrl":"/getzero","path":"/getzero","votes":0,"fans":34,"stacks":30,"following":false,"followContext":null,"__typename":"Tool"},"Tool:105786682014152582":{"id":"105786682014152582","name":"Magic","slug":"magic-link","title":"Build apps with blazing-fast, customizable, passwordless login","verified":false,"imageUrl":"https://img.stackshare.io/service/25116/default_72abdd9abb9e2ac2833d74e4e013774df2d25d83.jpg","canonicalUrl":"/magic-link","path":"/magic-link","votes":0,"fans":52,"stacks":47,"following":false,"followContext":null,"__typename":"Tool"},"Tool:104915889126452025":{"id":"104915889126452025","name":"Tables","slug":"tables","title":"Tables helps teams easily track & automate tasks (by Google)","verified":false,"imageUrl":"https://img.stackshare.io/service/21095/default_9df0f488585ed467c4fe9832718484926bf5dcd7.png","canonicalUrl":"/tables","path":"/tables","votes":0,"fans":84,"stacks":48,"following":false,"followContext":null,"__typename":"Tool"},"Tool:103328183869675762":{"id":"103328183869675762","name":"DB","slug":"db","title":"Version control for databases: save, restore, and archive snapshots of your database from the command line","verified":false,"imageUrl":"https://img.stackshare.io/service/11593/no-img.png","canonicalUrl":"/db","path":"/db","votes":0,"fans":524,"stacks":518,"following":false,"followContext":null,"__typename":"Tool"},"$Company:101231709530029071.blogPosts({\"after\":null,\"first\":4}).edges.3":{"node":{"type":"id","generated":false,"id":"BlogPost:111712524601878225","typename":"BlogPost"},"__typename":"BlogPostEdge"},"$Company:101231709530029071.blogPosts({\"after\":null,\"first\":4}).pageInfo":{"endCursor":"NA","hasNextPage":true,"__typename":"PageInfo"},"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"})":{"count":31,"edges":[{"type":"id","generated":true,"id":"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.0","typename":"StackEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.1","typename":"StackEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.2","typename":"StackEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.3","typename":"StackEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.4","typename":"StackEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.5","typename":"StackEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.6","typename":"StackEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.7","typename":"StackEdge"},{"type":"id","generated":true,"id":"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.8","typename":"StackEdge"}],"pageInfo":{"type":"id","generated":true,"id":"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).pageInfo","typename":"PageInfo"},"__typename":"StackConnection"},"Stack:106461160606930684":{"websiteUrl":null,"id":"106461160606930684","slug":"open-sourcing-querybook-pinterests-collaborative-big-data-hub","name":"Open Sourcing Querybook, Pinterestâs Collaborative Big Data Hub","path":"/pinterest/open-sourcing-querybook-pinterests-collaborative-big-data-hub","private":false,"repoStack":false,"services({\"withoutPackages\":true})":[{"type":"id","generated":false,"id":"Tool:101231773837179153","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773851859414","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773853533403","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773854768982","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773409399220","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773774313645","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773920191005","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773941167904","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775419688564","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773712725009","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774778599369","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774372347323","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774217017036","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775802024485","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774501522052","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774119036971","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:106456126802764865","typename":"Tool"}],"__typename":"Stack"},"Layer:101231772947014609":{"id":"101231772947014609","slug":"application_and_data","__typename":"Layer"},"Tool:101231773851859414":{"id":"101231773851859414","name":"MySQL","imageUrl":"https://img.stackshare.io/service/1025/logo-mysql-170x170.png","canonicalUrl":"/mysql","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773853533403":{"id":"101231773853533403","name":"PostgreSQL","imageUrl":"https://img.stackshare.io/service/1028/ASOhU5xJ.png","canonicalUrl":"/postgresql","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773854768982":{"id":"101231773854768982","name":"Redis","imageUrl":"https://img.stackshare.io/service/1031/default_cbce472cd134adc6688572f999e9122b9657d4ba.png","canonicalUrl":"/redis","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773774313645":{"id":"101231773774313645","name":"Elasticsearch","imageUrl":"https://img.stackshare.io/service/841/Image_2019-05-20_at_4.58.04_PM.png","canonicalUrl":"/elasticsearch","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Layer:101231772947362527":{"id":"101231772947362527","slug":"utilities","__typename":"Layer"},"Tool:101231773920191005":{"id":"101231773920191005","name":"Socket.IO","imageUrl":"https://img.stackshare.io/service/1161/vI0ZZlhZ_400x400.png","canonicalUrl":"/socket-io","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773941167904":{"id":"101231773941167904","name":"R Language","imageUrl":"https://img.stackshare.io/service/1213/r-logo.png","canonicalUrl":"/r-language","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231775419688564":{"id":"101231775419688564","name":"Jupyter","imageUrl":"https://img.stackshare.io/service/4190/fGBUdNf__400x400.jpg","canonicalUrl":"/jupyter","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Tool:101231773712725009":{"id":"101231773712725009","name":"Google Cloud Storage","imageUrl":"https://img.stackshare.io/service/694/Cloud_Storage.png","canonicalUrl":"/google-cloud-storage","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231774778599369":{"id":"101231774778599369","name":"Airflow","imageUrl":"https://img.stackshare.io/service/3130/airflow.png","canonicalUrl":"/airflow","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231774372347323":{"id":"101231774372347323","name":"Jinja","imageUrl":"https://img.stackshare.io/service/2303/New_Project__20_.png","canonicalUrl":"/jinja2","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231775802024485":{"id":"101231775802024485","name":"Superset","imageUrl":"https://img.stackshare.io/service/4908/superset2.png","canonicalUrl":"/superset","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Tool:101231774119036971":{"id":"101231774119036971","name":"Evernote","imageUrl":"https://img.stackshare.io/service/1664/Msdwofz8_400x400.jpg","canonicalUrl":"/evernote","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Tool:106456126802764865":{"id":"106456126802764865","name":"Querybook","imageUrl":"https://img.stackshare.io/service/25752/default_0337bc010f3cb137893fe12aa28b06b75e4121a2.png","canonicalUrl":"/querybook","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Layer:101231772947875434":{"id":"101231772947875434","slug":"devops","__typename":"Layer"},"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.0":{"node":{"type":"id","generated":false,"id":"Stack:106461160606930684","typename":"Stack"},"__typename":"StackEdge"},"Stack:104484416551667677":{"websiteUrl":null,"id":"104484416551667677","slug":"empowering-pinterest-data-scientists-and-machine-learning-engineers-with-pyspark","name":"Empowering Pinterest Data Scientists and Machine Learning Engineers with PySpark","path":"/pinterest/empowering-pinterest-data-scientists-and-machine-learning-engineers-with-pyspark","private":false,"repoStack":false,"services({\"withoutPackages\":true})":[{"type":"id","generated":false,"id":"Tool:101231773837179153","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774206661614","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773409399220","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776364087566","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775697957346","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774331076628","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775419688564","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774068594470","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774217017036","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774501522052","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231777971452468","typename":"Tool"}],"__typename":"Stack"},"Tool:101231776364087566":{"id":"101231776364087566","name":"Yarn","imageUrl":"https://img.stackshare.io/service/5848/44mC-kJ3.jpg","canonicalUrl":"/yarn","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231775697957346":{"id":"101231775697957346","name":"TensorFlow","imageUrl":"https://img.stackshare.io/service/4717/FtFnqC38_400x400.png","canonicalUrl":"/tensorflow","layer":{"type":"id","generated":false,"id":"Layer:101231772947362527","typename":"Layer"},"__typename":"Tool"},"Tool:101231774331076628":{"id":"101231774331076628","name":"Apache Spark","imageUrl":"https://img.stackshare.io/service/2220/ca72c4715da998b0bf5d1c857958bed3.png","canonicalUrl":"/spark","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231774068594470":{"id":"101231774068594470","name":"Zookeeper","imageUrl":"https://img.stackshare.io/service/1528/apache-zookeeper.png","canonicalUrl":"/zookeeper","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231777971452468":{"id":"101231777971452468","name":"PySpark","imageUrl":"https://img.stackshare.io/service/9080/hNHMcixV_400x400.jpg","canonicalUrl":"/pyspark","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.1":{"node":{"type":"id","generated":false,"id":"Stack:104484416551667677","typename":"Stack"},"__typename":"StackEdge"},"Stack:105827077855042434":{"websiteUrl":null,"id":"105827077855042434","slug":"how-we-designed-our-continuous-integration-system-to-be-more-than-50-percent-faster","name":"How We Designed Our Continuous Integration System to be More Than 50% Faster","path":"/pinterest/how-we-designed-our-continuous-integration-system-to-be-more-than-50-percent-faster","private":false,"repoStack":false,"services({\"withoutPackages\":true})":[{"type":"id","generated":false,"id":"Tool:101231773858546548","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773669807419","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773838011785","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774206661614","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773405612798","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773842107538","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774641851090","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774151159684","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774543238864","typename":"Tool"}],"__typename":"Stack"},"Tool:101231773858546548":{"id":"101231773858546548","name":"Git","imageUrl":"https://img.stackshare.io/service/1046/git.png","canonicalUrl":"/git","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231773669807419":{"id":"101231773669807419","name":"Docker","imageUrl":"https://img.stackshare.io/service/586/n4u37v9t_400x400.png","canonicalUrl":"/docker","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231774151159684":{"id":"101231774151159684","name":"YAML","imageUrl":"https://img.stackshare.io/service/1744/yaml.png","canonicalUrl":"/yaml","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231774543238864":{"id":"101231774543238864","name":"Bazel","imageUrl":"https://img.stackshare.io/service/2697/default_85ab1999fe6310acaeece180990057d2e9ebfb3a.jpg","canonicalUrl":"/bazel","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.2":{"node":{"type":"id","generated":false,"id":"Stack:105827077855042434","typename":"Stack"},"__typename":"StackEdge"},"Stack:105266839716858205":{"websiteUrl":null,"id":"105266839716858205","slug":"pinterest-visual-signals-infrastructure-evolution-from-lambda-to-kappa-architecture","name":"Pinterest Visual Signals Infrastructure: Evolution from Lambda to Kappa Architecture","path":"/pinterest/pinterest-visual-signals-infrastructure-evolution-from-lambda-to-kappa-architecture","private":false,"repoStack":false,"services({\"withoutPackages\":true})":[{"type":"id","generated":false,"id":"Tool:101231773405612798","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773865214260","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774331076628","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773857450417","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774686680600","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774217017036","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774346313447","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775458765149","typename":"Tool"}],"__typename":"Stack"},"Tool:101231773857450417":{"id":"101231773857450417","name":"Hadoop","imageUrl":"https://img.stackshare.io/service/1044/elephant_rgb_sq.png","canonicalUrl":"/hadoop","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231774686680600":{"id":"101231774686680600","name":"Apache Flink","imageUrl":"https://img.stackshare.io/service/2968/kQB_QIB_.png","canonicalUrl":"/flink","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231775458765149":{"id":"101231775458765149","name":"Apache Parquet","imageUrl":"https://img.stackshare.io/service/4264/OGYr_m6J_400x400.jpeg","canonicalUrl":"/apache-parquet","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.3":{"node":{"type":"id","generated":false,"id":"Stack:105266839716858205","typename":"Stack"},"__typename":"StackEdge"},"Stack:107174427714574936":{"websiteUrl":null,"id":"107174427714574936","slug":"efficient-resource-management-at-pinterests-batch-processing-platform","name":"Efficient Resource Management at Pinterestâs Batch Processing Platform","path":"/pinterest/efficient-resource-management-at-pinterests-batch-processing-platform","private":false,"repoStack":false,"services({\"withoutPackages\":true})":[{"type":"id","generated":false,"id":"Tool:101231773409399220","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773405612798","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776364087566","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773865214260","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231777971452468","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774551560674","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:106456126802764865","typename":"Tool"}],"__typename":"Stack"},"Tool:101231774551560674":{"id":"101231774551560674","name":"YARN Hadoop","imageUrl":"https://img.stackshare.io/service/2713/elephant_rgb_sq_400x400.png","canonicalUrl":"/yarn-hadoop","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.4":{"node":{"type":"id","generated":false,"id":"Stack:107174427714574936","typename":"Stack"},"__typename":"StackEdge"},"Stack:105944882874646033":{"websiteUrl":null,"id":"105944882874646033","slug":"pinterest-flink-deployment-framework","name":"Pinterest Flink Deployment Framework","path":"/pinterest/pinterest-flink-deployment-framework","private":false,"repoStack":false,"services({\"withoutPackages\":true})":[{"type":"id","generated":false,"id":"Tool:101231773858546548","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773703650742","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773865214260","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774331076628","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774686680600","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774543238864","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774551560674","typename":"Tool"}],"__typename":"Stack"},"Tool:101231773703650742":{"id":"101231773703650742","name":"Jenkins","imageUrl":"https://img.stackshare.io/service/670/jenkins.png","canonicalUrl":"/jenkins","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.5":{"node":{"type":"id","generated":false,"id":"Stack:105944882874646033","typename":"Stack"},"__typename":"StackEdge"},"Stack:107053614258943122":{"websiteUrl":null,"id":"107053614258943122","slug":"faster-flink-adoption-with-self-service-diagnosis-tool-at-pinterest","name":"Faster Flink Adoption with Self-Service Diagnosis Tool at Pinterest","path":"/pinterest/faster-flink-adoption-with-self-service-diagnosis-tool-at-pinterest","private":false,"repoStack":false,"services({\"withoutPackages\":true})":[{"type":"id","generated":false,"id":"Tool:101231773838011785","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773409399220","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773774313645","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773865214260","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774686680600","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774426337070","typename":"Tool"}],"__typename":"Stack"},"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.6":{"node":{"type":"id","generated":false,"id":"Stack:107053614258943122","typename":"Stack"},"__typename":"StackEdge"},"Stack:103964177352253207":{"websiteUrl":null,"id":"103964177352253207","slug":"powering-pinterest-ads-analytics-with-apache-druid","name":"Powering Pinterest Ads Analytics with Apache Druid","path":"/pinterest/powering-pinterest-ads-analytics-with-apache-druid","private":false,"repoStack":false,"services({\"withoutPackages\":true})":[{"type":"id","generated":false,"id":"Tool:101231773851859414","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773865214260","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774331076628","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773857450417","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773857055849","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775267734699","typename":"Tool"}],"__typename":"Stack"},"Tool:101231775267734699":{"id":"101231775267734699","name":"Druid","imageUrl":"https://img.stackshare.io/service/3922/F65UpOhT.png","canonicalUrl":"/druid","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.7":{"node":{"type":"id","generated":false,"id":"Stack:103964177352253207","typename":"Stack"},"__typename":"StackEdge"},"Stack:104120115923611468":{"websiteUrl":null,"id":"104120115923611468","slug":"simplifying-web-deploys","name":"Simplifying Web Deploys","path":"/pinterest/simplifying-web-deploys","private":false,"repoStack":false,"services({\"withoutPackages\":true})":[{"type":"id","generated":false,"id":"Tool:101231773939333405","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773860248995","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773871022988","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774068594470","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231777634608771","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775589968477","typename":"Tool"}],"__typename":"Stack"},"Tool:101231773860248995":{"id":"101231773860248995","name":"C++","imageUrl":"https://img.stackshare.io/service/1049/cplusplus.png","canonicalUrl":"/cplusplus","layer":{"type":"id","generated":false,"id":"Layer:101231772947014609","typename":"Layer"},"__typename":"Tool"},"Tool:101231773871022988":{"id":"101231773871022988","name":"Varnish","imageUrl":"https://img.stackshare.io/service/1073/default_7811fe80d774e75973d4f3880e5903125f0bec3b.jpg","canonicalUrl":"/varnish","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"Tool:101231777634608771":{"id":"101231777634608771","name":"Envoy","imageUrl":"https://img.stackshare.io/service/8416/Tfk-FtVd_400x400.jpg","canonicalUrl":"/envoy","layer":{"type":"id","generated":false,"id":"Layer:101231772947875434","typename":"Layer"},"__typename":"Tool"},"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).edges.8":{"node":{"type":"id","generated":false,"id":"Stack:104120115923611468","typename":"Stack"},"__typename":"StackEdge"},"$Company:101231709530029071.stacksList({\"after\":null,\"first\":9,\"query\":\"\"}).pageInfo":{"endCursor":"OQ","hasNextPage":true,"__typename":"PageInfo"}}
Pinterest 3341 Followers
Pinterest's profile on StackShare is not actively maintained, so the information here may be out of date.
Jobs 61 San Francisco, CA, US; , CA, US San Francisco, CA, US; , US VIEW MORE
Decisions 5
James Man
Software Engineer at Pinterest
One of our top priorities at Pinterest is fostering a safe and trustworthy experience for all Pinners. As Pinterestâs user base and ads business grow, the review volume has been increasing exponentially, and more content types require moderation support. To solve greater engineering and operational challenges at scale, we needed a highly-reliable and performant system to detect, report, evaluate, and act on abusive content and users and so we created Pinqueue.
Pinqueue-3.0 serves as a generic platform for content moderation and human labeling. Under the hood, Pinqueue3.0 is a Flask + React app powered by Pinterestâs very own Gestalt UI framework . On the backend, Pinqueue3.0 heavily relies on PinLater, a Pinterest-built reliable asynchronous job execution system, to handle the requests for enqueueing and action-taking. Using PinLater has significantly strengthened Pinqueue3.0âs overall infra with its capability of processing a massive load of events with configurable retry policies.
Hundreds of millions of people around the world use Pinterest to discover and do what they love, and our job is to protect them from abusive and harmful content. Weâre committed to providing an inspirational yet safe experience to all Pinners. Solving trust & safety problems is a joint effort requiring expertise across multiple domains. Pinqueue3.0 not only plays a critical role in responsively taking down unsafe content, it also has become an enabler for future ML/automation initiatives by providing high-quality human labels. Going forward, we will continue to improve the review experience, measure review quality and collaborate with our machine learning teams to solve content moderation beyond manual reviews at an even larger scale.
Ashish Singh
Tech Lead, Big Data Platform at Pinterest
To provide employees with the critical need of interactive querying, weâve worked with Presto , an open-source distributed SQL query engine, over the years. Operating Presto at Pinterestâs scale has involved resolving quite a few challenges like, supporting deeply nested and huge thrift schemas, slow/ bad worker detection and remediation, auto-scaling cluster, graceful cluster shutdown and impersonation support for ldap authenticator.
Our infrastructure is built on top of Amazon EC2 and we leverage Amazon S3 for storing our data. This separates compute and storage layers, and allows multiple compute clusters to share the S3 data.
We have hundreds of petabytes of data and tens of thousands of Apache Hive tables. Our Presto clusters are comprised of a fleet of 450 r4.8xl EC2 instances. Presto clusters together have over 100 TBs of memory and 14K vcpu cores. Within Pinterest, we have close to more than 1,000 monthly active users (out of total 1,600+ Pinterest employees) using Presto, who run about 400K queries on these clusters per month.
Each query submitted to Presto cluster is logged to a Kafka topic via Singer. Singer is a logging agent built at Pinterest and we talked about it in a previous post . Each query is logged when it is submitted and when it finishes. When a Presto cluster crashes, we will have query submitted events without corresponding query finished events. These events enable us to capture the effect of cluster crashes over time.
Each Presto cluster at Pinterest has workers on a mix of dedicated AWS EC2 instances and Kubernetes pods. Kubernetes platform provides us with the capability to add and remove workers from a Presto cluster very quickly. The best-case latency on bringing up a new worker on Kubernetes is less than a minute. However, when the Kubernetes cluster itself is out of resources and needs to scale up, it can take up to ten minutes. Some other advantages of deploying on Kubernetes platform is that our Presto deployment becomes agnostic of cloud vendor, instance types, OS, etc.
#BigData #AWS #DataScience #DataEngineering
Jigar Shah
Security Software Engineer at Pinterest
Security team builds services, solutions and tools for teams within Pinterest to manage accesses of critical production resources as well as facilitate adding authentication, authorization and accounting within critical production micro-services. Issuing identities to > 130k AWS EC2 instances, using them to make authentication and authorization decisions high bandwidth critical traffic flow conditions while services communicate in a mesh, requires a great deal of performance and stability. GoLang provides exactly that. Also primary engineering skills in Security team need not to be fully familiar with complex programming logic requires in Java/Kotlin while avoiding the pitfalls on runtime failures or uncertain behavior using Python in production leads us to GoLang
Jigar Shah
Security Software Engineer at Pinterest
A consistent plane across teams at Pinterest to achieve deploy orchestration using EC2 APIs underneath.
VIEW MORE
Blog Posts 238 Jan 4 2024 at 8:19PM
by Pinterest Engineering Dec 21 2023 at 2:43PM
by Pinterest Engineering +2 Nov 28 2023 at 10:18PM
by Pinterest Engineering Nov 22 2023 at 7:20PM
by Pinterest Engineering VIEW MORE
Tech Talks 17 by Pong Eksombatchai
One of the primary engineering challenges at Pinterest is how to help people discover ideas they want to try, which means serving the right idea to the right person at the right time. While most other recommender systems have a small pool of possible candidates (like 100,000 film titles on a movie review site), Pinterest has to recommend from a catalog of more than 4+ billion ideas. To make it happen, we built Pixie, a flexible, graph-based system for making personalized recommendations in real-time.
http://about.pinterest.com/
iTunes App Store: http://pin.it/VQ-xmlR
Google Play: http://pin.it/bEYNSEA by Ekrem Kocaguneli
Welcome to Pinterestâs home-sweet-Home Feed. Ekrem starts by giving you the ins and outs of how Pinterestâs highly personalized Home Feed works, then explains how we use machine learning techniques to rank the Pins you find there and fully personalize the experience.â
http://about.pinterest.com/
iTunes App Store: http://pin.it/VQ-xmlR
Google Play: http://pin.it/bEYNSEA by Justin Mejorada-Pier & Charlie Gu
In this talk, Justin and Charlie run through the challenges they faced while building in-house tools like DataHub (the primary way people run queries and mine data here at Pinterest). Tune in as they share the hard-won learnings they picked up along the way.
http://about.pinterest.com/
iTunes App Store: http://pin.it/VQ-xmlR
Google Play: http://pin.it/bEYNSEA by Jenny Liu
Learn how we built the web-scale recommender system that powers over 40% of user engagement on Pinterest. Jenny will discuss how the small but mighty team prioritized the simplest and highest-leverage solutions. Sheâll also give a rundown of the many challenges and learnings that came up in the evolution of candidate generation, Memboost and ranking in our system.â
http://about.pinterest.com/
iTunes App Store: http://pin.it/VQ-xmlR
Google Play: http://pin.it/bEYNSEA VIEW MORE