In isolation because of Corona last year, I started to share many lesser-known database tricks I know on Twitter (@tobias_petry). Although I thought that only a few people would be interested in something like this, it became a matter of course over the months. Meanwhile, thousands follow me to read my database tips or news.
Since every message in the constant social media stream vanishes after a few days, I had to do something about it. Knowledge must be preserved. I sat down for a few weeks and reworked every example and every text to create an ebook that you can read in an evening and still impart tons of knowledge.
And so "Next-Level Database Techniques for Developers" was born.
May I suggest providing a sample chapter before requiring an email address?
EDIT: There are 10 sample pages (images) but on Firefox they are so small you might not notice them. The pages are in a row flexbox container which on Chrome overflows with a scrollbar but on Firefox scales all the way down to fit everything in view at once. Please add "min-width: 45%" in addition to the "width: 45%". Accessibility would also require links to the textual versions.
It's a 50-page book. If you actually look at what's presented on the landing page, three of the topics have the entire page shown, so you can see exactly what topics will look like.
I'm not the guy, so I don't know. But if I don't like what he does with it, I'll set a filter in about 25 seconds to send the email to the pits of /dev/null
Gmail now started to classify the email with the ebook attachment as spam. After having worked without any problems before. I am now changing my code, give me a few minutes.
You may wish to run a spellcheck to find the others I didn't.
My disposable email I used to sign up has already been nullrouted. Rather than tit-for-tat collecting PII, why not just publish it to the whole web without the extra hoops? I'd have already sent you a PR in that case with more copy edits.
It's not about PII, it's a comms channel to db pros. And yes, a good email list like that is quite valuable, and he wouldn't get that just sharing the resource as you suggest.
You are not alone. Databases are so easy to use, and that is very good! But due to that simplicity most devs never learn more than the basic statements, but there is so much more that can be used.
Very generous! Fwiw I bet you could make significant money (5 figures) if you made a longer version and charged in the $20-50 realm. It's hard to find quality up-to-date resources on these topics and the info is extremely valuable--the interest on HN attests to this. Also totally cool if that's not interesting to you or not your thing :)
If you change your mind, it shouldn’t be hard to handle the taxes; I think the approach would be the same as for hobby income.
If you’re in the US and filing taxes as a employee I think you’d just sum up the book sales and stick that under Other Income. If you’re already filing as a business or self employed, just roll it in no? Of course, other countries are available.
Anyway, I’d happily pay a few bucks at the very least for this. If it’s useful, it’s going to help my own income. If I see people who maybe can’t afford a few bucks can get it for free, I’ll be even happier to pay.
It seems pretty self-evident that they wish to exchange something of value for something else of value. This is a pretty common activity among humans.
Unfortunately, as we see here, "instead, why don't you do even more work to change it to my specifications and then give it to me for free" is a common counteroffer.
I am already writing every tip as a blog post. But those blog posts take a full day to write as they are much more detailled compared to the short summary in the ebook. My time is limited like yours, and the short ebook is the best way to spread the knowledge: You get the information now, and I'll notify you when those full articles are written.
I think that's true, but I'm also one of the people that's going to bounce from that.
While several chapters have mildly interesting titles, what I've come used to from these kinds of offers are mostly just rehashed blog articles from other sources. I remember one extra special case about an Elixir "book" that pretty much just copy-pasted the official getting started guide.
Generally speaking, these kind of hurdles don't inspire confidence in the quality of the content.
But you can see the actual content. 6% of the book is on display on the landing page. I think you should just judge the quality of that instead of inventing ways to make assumptions based on other factors.
Yeah, of course it does. Fully agree. I don't understand the point you're making.
I haven't offered my definition of value. I just said that you can clearly determine the value to yourself by reading the landing page, it has the relevant information required (besides actually reading all the content).
The "privacy violation" is not the value of the book, that's the cost to you.
We're not discussing the values inherent in privacy concerns, we're discussing the value of the book, and whether or not you can guess at its value before you give the guy your email.
No, you're talking about something else. Obviously OOP's concern is about the value of the book vis a vis what is demanded of the recipient in exchange for the book.
Well, for example, intro doesn’t say which SQL flavor the author is targeting. As a MSSQL user I wouldn’t want to share my email in exchange for MySQL tricks
Author is offering their work at a given price. That price is email. It may be worth it to you or not. Requesting a pirated copy of it without paying the price is not something I encourage,given so many of us here are well to do knowledge workers whose live being depends on people paying for our work.
(Not to mention, it's same or less work for you to create a temp email account, vs somebody else doing the work of signing up, sharing their email, and uploading and hosting content for your convenience). Yes yes information wants to be free and all that, but this is just lazy :-D
You say that, yet every paywalled news article posted on HN quickly gets a web.archive.org or archive.is link as a top comment. What is the fundamental difference with this?
To be honest. Just subscribe and the next time I wrote a free article and share it with you unsubscribe. I don‘t spam you. Ans I don‘t mind when you only want to grab the ebook.
The problem is not unknown value. It’s unknown cost. Until I know everything you will ever do to me with my email I don’t know the true cost. What I can guess—given the thousands of precedents I’ve encountered over the years—is that the total cost will be time taken from my short life to fend of yet more marketing and yet more marketers. For comparison, if you ask me for currency, I know the total cost of ownership. Usually, for me, a few units of currency are a rounding error compared to the value I place on time.
The total cost is how much time it takes to google "temp email" and then click on the first link and use that temp email to get the book. It should take about 2 minutes, maybe even less time than writing out your comment.
Sure, same as the total cost of a movie is how long it takes to type the name into a torrent search and click the magnet link. If the OP wanted a bunch of dead temp emails, why ask other people to input them. But, not my point.
I think on HN a good assumption is posters want to discuss, to get feedback. Also not a bad assumption the notion of temp email will be news to absolutely no one at all here.
I have a negative reaction to sites that require email.
In this case, the value was made pretty clear in the homepage.
I was happy to only have to exchange my email for what appears to be a very high quality resource - the author is either extremely generous or undervaluing their knowledge!
The value is clear if you look at the landing page. There's some interesting techniques in this book, for sure. (I've worked with SQL databases for over 20 years. Several of them I hadn't seen.)
Providing an email address seemed like a fair trade.
These index choices are solid. But I suggest for the second one to swap the movie_id and user_id because in most cases you want to get all the watchlist entries for a user and not all users having the movie on the watchlist. Therefore all movies on a users watchlist are close to each other and not spread through the whole table by the movie_id.
I only have like a dozen email addresses. Several of them are for junk mail and subscription type stuff. Do you... not have a junk email address? I would strongly encourage you to start on that, because, even just a stupid gmail account you never use for anything important but use for junk is probably a life changing situation for you if you've never heard of doing something like this.
Edit: Super power here is setting up a 1Password Identity (or whichever tool you use, hell, even a snippet) to auto fill junk email in when signing up for stuff vs not-junk email. I have three identities. One for work, one for personal, one for junk. Makes this stuff super easy and fast.
I wasn't trying to make a point about price (e-mails are practically free). The book could cost half a penny and my comment would still stand. People just view items that cost something differently than genuinely free items, and not in a rational, economic way.
YouTube asks you to watch ads, but we still consider it to be free. Many mobile games make you create an account (and provide your email) before you can play but we still consider them free because you don't have to give any money. That's the definition here: don't have to pay money = free. This ebook is free
The question here is whether this ebook meets the definition of free as it is commonly known/accepted. As can be proven by the general population calling YouTube free or a mobile game that requires an email free, this ebook can be called free
Yes "nothing is free" yet we still often call these things free. It definitely wasn't free for him to make it.
Average person on here views those hours as billable if they were to do it themselves, when they make decisions about what to do, or alternatives (opportunity cost).
Maybe he should charge them consulting rates for this PDF (and not take their -- correction: an -- email. The horror).
It's only because this is HN that it's even a discussion.
The thing is that calling something free and then asking for something in exchange can trigger someone on autistic spectrum, where likely there is an overrepresentation of on HN.
Because I weigh the potential of being marketed to by email as being a negative value greater than the potential positive value of the information provided in exchange. 'Free (with the potential to spam you later)' is a world apart from 'Free, gratis, enjoy'.
The author loses much more than you. You can always unsubscribe, or — if you don't trust unsubscribe — filter away his emails. From the beginning you were always in full control. Giving your email grants the author no power over you whatsoever.
You are being down voted because this is a shallow view. The expression of interest tied to an identity has value. For proof see Google, Meta, Amazon, and Facebook earnings.
Agree. The guy provides engineering know how and we're pigeon dropping all over it for bureaucratic dorkish nonsense? You gotta have an attention span that separates noise from value
Yeah, I was sad seeing some of the reactions. To each his own. For a student like me, I would gladly take a free resource and won't mind the newsletter.
Maybe OP can also put a donate button for people who don't want to provide their E-Mail and get the book.
The criticism is that it's not honest. "For free" is not correct. It's "book against harvesting your contact data". If that's what the first page would say, then it would be honest and nobody would be upset. But acting as if it's been "published" out of pure altruism is just misleading people, and they are righfully pointing that out.
Just use a throwaway mail, what's the big deal? Companies already have tons of your private data without you ever even interacting with them. You're just crying into a 50 gallon drum of milk.
This is cool! Re: multiple aggregates in one query, I wrote a Ruby gem that adds an even-more-powerful and multi-database-compatible version to ActiveRecord. (I have tested Postgres, MySQL, and SQLite; others probably work, too.)
Has anyone been able to get the ebook? I submitted my email and confirmed the subscription, but no PDF sent I can only see the Tips section in the website.
Awesome, thank you. If you are on Microsoft SQL Server I additionally recommend to take a look at Brent Ozars sp_blitz[1] script collection and the according youtube series. Many optimizations apply for other databases, too.
The value proposition was clear to me from the landing page. Maybe it wasn't to you. I could read enough of it to say "hey, this sounds interesting, I wouldn't mind hearing more from this person."
Also, SQL databases are one of my favorite tech topics. Postgres, especially, has tons of cool features (example: lateral joins.)
Gmail started to mark the email with the PDF as spam. It worked perfectly before this trended on hn. I guess I triggered some rate-limiting rule. If you activate the subscription again you now get a download link.
And I will look at the stats tomorrow and send everyone the PDF who didn't get it because of the false spam classification.
I haven't read the whole thing but I really enjoyed the introduction and agree completely. The RDBMS I've spent the most time with over the years is Microsoft SQL (immediately when 2000 was released) and over the years I've been surprised by two things: (a) How many developers that work with databases every day yet haven't the foggiest idea how to do anything the GUI tooling doesn't handle "easily" and (b) How quickly a developer can go from zero to "able to keep things performing well for all but the ugliest scenarios" knowledge-wise.
I've watched that last part unfold on many occasions. Usually I'd be brought in because the developers have done everything down to "copying the data to denormalized tables[0]" to try to sort out slowness. Most of the time, just "blindly investigating the schema" will turn up something frightening that the ORM did, or a mess of inappropriate indexes. Two indexes on a table used by nearly every query in the database caused 30 second requests to yield sub-second results in one case[1]. I'm never willing to walk in and promise that, but I can't think of a time it hasn't happened when similar circumstances were presented to me.
So if you're dragging your feet about learning SQL, take this as my encouragement: it's one of those things where the rewards come quick and the effort is far less than you probably expect.
[0] ... with a broken sync process that has to be run carefully b/c it hammers the already over-sized database every time it fires.
[1] If memory serves, it was an account table ... used a GUID between the app and the database, but primary key was an integer auto-incrementing field which was used as the FK to other tables. All I remember was adding a unique index to the GUID field and including the e-mail address/name columns which were included in every query. Ran the fix in production and it felt like "the dam broke".
The last few years I've been working on a fairly big django project written by someone learning the problem domain and python/django at the same time.
I have a lot of similar stories and I you are absolutely right to encourage people to learn the basics, at least (looking at you, indexes and perf tools).
We're talking about having our cpu hitting 80-90% and rising internal temperature to 70-80C, while executing a task thats normally performed tens or hundreds of times during the workday.
A couple of carefully planned indexes, a bit of sql shuffling, is all it takes sometimes.
The upside of working with cheap bare metal servers is that you catch these things early on (5 concurrent users and your server is toasted). Fun times.
The details depend heavily on what specific database you’re working with, but in broad strokes, you’ll want to know: indices, query plans, when and where to cache expensive computations, every f—- word of your DB manual’s chapter on concurrency control, and the fastest method(s) for yeeting data in and out from your language/toolkit of choice.
If you're really starting out from square 1, I might read this book first: https://www.amazon.com/Database-Design-Mere-Mortals-Annivers... (although I read an earlier edition). The Art of SQL is a great book, but I wish I'd read something a bit...easier...first, lol. I struggled with it.
Yeah well, I am old school (or at least old) so I had already a good grasp of SQL, but I think the book is good because it explains overarching concepts very well.
1. Trace your application, so you know which query is running slowly in production.
2. Using this exact query, run `EXPLAIN ANALYZE` or whatever your RDBMS equivalent is.
3. Read the output, see which step is taking the slowest. Use google to help.
4. Google-fu until you find out which index might help you.
Over time, (3) and (4) requires less and less Google, because there's really only a few common cases that give you 100% of the speedup in 80% of cases.
Once you know this path to improvement exists, it's trivial to progress down it habitually. The `EXPLAIN ANALYZE` output looks like Greek at first, but quickly becomes as familiar to parse as a compiler error, etc.
DB 'expert' here - agree completely. It's about profiling then banging your head against it and learning more from books/the docs/web. That's really it.
Gmail started to mark the email with the PDF as spam. It worked perfectly before this trended on hn. I guess I triggered some rate-limiting rule. If you activate the subscription again you now get a download link.
And I will look at the stats tomorrow and send everyone the PDF who didn't get it because of the false spam classification.
I actually appreciate asking for email, otherwise the most likely outcome is I will download the book and forget it. If there's some kind of a follow-up, there is a better chance to be reminded of it and read it.
Honest question- why does one choose to harvest emails for something like this vs just putting ads on the page? I have seen this model used for several ebooks, but it seems like long term its much more viable to just make the content widely available and put adwords on it or something similar.
If you ever want to release an update or launch a new product or book, you can now communicate directly with those who are already interested in your work.
You’re on the right track, the immediate value of the email addresses is near nil. Instead consider these email addresses are highly self-targeted due to the nature of the sign up. That can then be sold for direct use, for resale, or most likely for inclusion in larger data sets that aggregate tracking information about individuals for ad targeting and browsing/results personalization. For example, consider the value to Amazon to be able to match this expressed interest with the email address of my Prime account; they could then push SQL-related content on my Amazon front-page with justifiable confidence I’d buy something vs the default of showing me canned kidney beans. Of course, that they show me canned kidney beans _because_ I just bought an SSD does show how this is mostly pie in the sky/skynet nonsense.
184 comments
[ 4.4 ms ] story [ 249 ms ] threadSince every message in the constant social media stream vanishes after a few days, I had to do something about it. Knowledge must be preserved. I sat down for a few weeks and reworked every example and every text to create an ebook that you can read in an evening and still impart tons of knowledge.
And so "Next-Level Database Techniques for Developers" was born.
EDIT: There are 10 sample pages (images) but on Firefox they are so small you might not notice them. The pages are in a row flexbox container which on Chrome overflows with a scrollbar but on Firefox scales all the way down to fit everything in view at once. Please add "min-width: 45%" in addition to the "width: 45%". Accessibility would also require links to the textual versions.
Let me give you an email in exchange of that bag of tricks.
Out of curiosity: what’s happening with the email? ( out of honesty: you will get my spam ridden gmail ;) )
Fixed
Anyway thanks, it's great.
Columns is misspelled on p33.
You may wish to run a spellcheck to find the others I didn't.
My disposable email I used to sign up has already been nullrouted. Rather than tit-for-tat collecting PII, why not just publish it to the whole web without the extra hoops? I'd have already sent you a PR in that case with more copy edits.
It's amazing every time how much load a properly configured database can reduce.
Especially the tips for optimizing indexes are very good. "Partial Indexes for Uniqueness Constraints" is my most favorite.
Thanks for writing it!
If you’re in the US and filing taxes as a employee I think you’d just sum up the book sales and stick that under Other Income. If you’re already filing as a business or self employed, just roll it in no? Of course, other countries are available.
Anyway, I’d happily pay a few bucks at the very least for this. If it’s useful, it’s going to help my own income. If I see people who maybe can’t afford a few bucks can get it for free, I’ll be even happier to pay.
Automatic no.
I can skim the chapter titles and get a pretty good idea of exactly what value there is. I'm not sure what's holding you up.
To me, the reader, what value does sharing my email or it being in The incredibly less flexible "ebook" format have?
It seems pretty self-evident that they wish to exchange something of value for something else of value. This is a pretty common activity among humans.
Unfortunately, as we see here, "instead, why don't you do even more work to change it to my specifications and then give it to me for free" is a common counteroffer.
Don't forget you don't owe these guys what they're asking for. You've done the work to share your knowledge, they can do the work to gather it.
While several chapters have mildly interesting titles, what I've come used to from these kinds of offers are mostly just rehashed blog articles from other sources. I remember one extra special case about an Elixir "book" that pretty much just copy-pasted the official getting started guide.
Generally speaking, these kind of hurdles don't inspire confidence in the quality of the content.
I haven't offered my definition of value. I just said that you can clearly determine the value to yourself by reading the landing page, it has the relevant information required (besides actually reading all the content).
It just seems like you're applying a very narrow view of what can be considered "value" here.
We're not discussing the values inherent in privacy concerns, we're discussing the value of the book, and whether or not you can guess at its value before you give the guy your email.
You're talking about something else.
Author is offering their work at a given price. That price is email. It may be worth it to you or not. Requesting a pirated copy of it without paying the price is not something I encourage,given so many of us here are well to do knowledge workers whose live being depends on people paying for our work.
(Not to mention, it's same or less work for you to create a temp email account, vs somebody else doing the work of signing up, sharing their email, and uploading and hosting content for your convenience). Yes yes information wants to be free and all that, but this is just lazy :-D
HN should have a tag for walled contents.
I think on HN a good assumption is posters want to discuss, to get feedback. Also not a bad assumption the notion of temp email will be news to absolutely no one at all here.
In this case, the value was made pretty clear in the homepage.
I was happy to only have to exchange my email for what appears to be a very high quality resource - the author is either extremely generous or undervaluing their knowledge!
Providing an email address seemed like a fair trade.
(Also, one of my favorite techniques along the lines of your Lock Contention example: https://www.enterprisedb.com/blog/what-skip-locked-postgresq... is an amazing way to have a foolproof work queue without introducing things like Redis!)
1) movie_actors (movie_id, actor_id, order_index)
2) movie_watchlist (movie_id, user_id, created_at)
3) movie_ratings (movie_id, user_id, rating, created_at)
I know strange question, but most guides suggest all these table should have autoincrement id column
Edit: Super power here is setting up a 1Password Identity (or whichever tool you use, hell, even a snippet) to auto fill junk email in when signing up for stuff vs not-junk email. I have three identities. One for work, one for personal, one for junk. Makes this stuff super easy and fast.
For example, see: https://www.npr.org/sections/money/2012/07/13/156737801/the-...
Other people do value their time, therefore it's not free for them.
Average person on here views those hours as billable if they were to do it themselves, when they make decisions about what to do, or alternatives (opportunity cost).
Maybe he should charge them consulting rates for this PDF (and not take their -- correction: an -- email. The horror).
It's only because this is HN that it's even a discussion.
I would rather use the term opportunity cost.
Maybe OP can also put a donate button for people who don't want to provide their E-Mail and get the book.
Thanks a lot, tpetry!
https://github.com/midnightmonster/activerecord-summarize
[1]: https://www.brentozar.com/blitz/
Maybe it’s been added in the face or HN grumpyness? ( tbh : I would not have give anything without those extracts, so your comments in on point )
Also, SQL databases are one of my favorite tech topics. Postgres, especially, has tons of cool features (example: lateral joins.)
I'm fascinated by DBMS each day I use them.
And I will look at the stats tomorrow and send everyone the PDF who didn't get it because of the false spam classification.
Thank you for the free book.
I've watched that last part unfold on many occasions. Usually I'd be brought in because the developers have done everything down to "copying the data to denormalized tables[0]" to try to sort out slowness. Most of the time, just "blindly investigating the schema" will turn up something frightening that the ORM did, or a mess of inappropriate indexes. Two indexes on a table used by nearly every query in the database caused 30 second requests to yield sub-second results in one case[1]. I'm never willing to walk in and promise that, but I can't think of a time it hasn't happened when similar circumstances were presented to me.
So if you're dragging your feet about learning SQL, take this as my encouragement: it's one of those things where the rewards come quick and the effort is far less than you probably expect.
[0] ... with a broken sync process that has to be run carefully b/c it hammers the already over-sized database every time it fires.
[1] If memory serves, it was an account table ... used a GUID between the app and the database, but primary key was an integer auto-incrementing field which was used as the FK to other tables. All I remember was adding a unique index to the GUID field and including the e-mail address/name columns which were included in every query. Ran the fix in production and it felt like "the dam broke".
I have a lot of similar stories and I you are absolutely right to encourage people to learn the basics, at least (looking at you, indexes and perf tools).
We're talking about having our cpu hitting 80-90% and rising internal temperature to 70-80C, while executing a task thats normally performed tens or hundreds of times during the workday.
A couple of carefully planned indexes, a bit of sql shuffling, is all it takes sometimes.
The upside of working with cheap bare metal servers is that you catch these things early on (5 concurrent users and your server is toasted). Fun times.
Or do you just mean using indexes basically? I'm just not sure how many unknown unknowns I have wrt sql.
1. Trace your application, so you know which query is running slowly in production.
2. Using this exact query, run `EXPLAIN ANALYZE` or whatever your RDBMS equivalent is.
3. Read the output, see which step is taking the slowest. Use google to help.
4. Google-fu until you find out which index might help you.
Over time, (3) and (4) requires less and less Google, because there's really only a few common cases that give you 100% of the speedup in 80% of cases.
Once you know this path to improvement exists, it's trivial to progress down it habitually. The `EXPLAIN ANALYZE` output looks like Greek at first, but quickly becomes as familiar to parse as a compiler error, etc.
The offering is called an eBook but I'm not seeing any way to download a local copy as PDF or otherwise.
And I will look at the stats tomorrow and send everyone the PDF who didn't get it because of the false spam classification.
Only critique is that it would be super useful to include some example query results for each section so show the effect.
I don't have any of the extended filters, but it is a small size reduction with the default load: