From 68c1e79a1d3280ffda83123beb0140463fe20535 Mon Sep 17 00:00:00 2001 From: Aaron Hammer Date: Fri, 16 Feb 2024 17:28:02 -0700 Subject: [PATCH] new blog --- .../consistent-hashing-request-flow.webp | Bin 0 -> 68284 bytes .../notes-on-database-sharding/hashring.webp | Bin 0 -> 10896 bytes src/features/blog/random-blog.ts | 1 + src/features/blog/ui/Blog.tsx | 6 + src/features/blog/ui/BlogParagraph.tsx | 4 +- .../blog/ui/BlogParagraphSubsection.tsx | 16 ++ src/features/blog/ui/BlogPost.tsx | 2 +- .../blog/notes-on-database-sharding.tsx | 162 ++++++++++++++++++ 8 files changed, 188 insertions(+), 3 deletions(-) create mode 100644 public/images/blog/notes-on-database-sharding/consistent-hashing-request-flow.webp create mode 100644 public/images/blog/notes-on-database-sharding/hashring.webp create mode 100644 src/features/blog/ui/BlogParagraphSubsection.tsx create mode 100644 src/routes/blog/notes-on-database-sharding.tsx diff --git a/public/images/blog/notes-on-database-sharding/consistent-hashing-request-flow.webp b/public/images/blog/notes-on-database-sharding/consistent-hashing-request-flow.webp new file mode 100644 index 0000000000000000000000000000000000000000..7b4754292bdf961e663780bf80b3ba1e9e75c1e3 GIT binary patch literal 68284 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 Hf4~0+#fBLS literal 0 HcmV?d00001 diff --git a/src/features/blog/random-blog.ts b/src/features/blog/random-blog.ts index 20c1880..c060eb1 100644 --- a/src/features/blog/random-blog.ts +++ b/src/features/blog/random-blog.ts @@ -2,6 +2,7 @@ export const randomBlog = () => { const blogs = [ "/blog/setting-up-square-payment-links-the-stripe-alternative", "/blog/fix-for-deploying-static-solid-start-5.x-to-cloudflare-pages", + "/blog/notes-on-database-sharding", ]; const random = Math.floor(Math.random() * blogs.length); return blogs[random]; diff --git a/src/features/blog/ui/Blog.tsx b/src/features/blog/ui/Blog.tsx index fc54b6c..a486405 100644 --- a/src/features/blog/ui/Blog.tsx +++ b/src/features/blog/ui/Blog.tsx @@ -18,6 +18,12 @@ export default function Blog() {

Setting up Square Payment Links the Stripe Alternative

+ +
+
+

Notes on Database Sharding

+
+ { return ( -
+
{props.subtitle && ( -

{props.subtitle}

+

{props.subtitle}

)}

{props.children}

diff --git a/src/features/blog/ui/BlogParagraphSubsection.tsx b/src/features/blog/ui/BlogParagraphSubsection.tsx new file mode 100644 index 0000000..c8de5c8 --- /dev/null +++ b/src/features/blog/ui/BlogParagraphSubsection.tsx @@ -0,0 +1,16 @@ +type BlogParagraphProps = { + subSectionTitle?: string; + children: any; +}; +export const BlogParagraphSubsection = (props: BlogParagraphProps) => { + return ( +
+ {props.subSectionTitle && ( +

+ {props.subSectionTitle} +

+ )} +

{props.children}

+
+ ); +}; diff --git a/src/features/blog/ui/BlogPost.tsx b/src/features/blog/ui/BlogPost.tsx index c1d42c9..611ed70 100644 --- a/src/features/blog/ui/BlogPost.tsx +++ b/src/features/blog/ui/BlogPost.tsx @@ -9,7 +9,7 @@ export const BlogPost = (props: BlogPostProps) => {
{props.title} | ahammer.dev -

{props.title}

+

{props.title}

{props.children}
); diff --git a/src/routes/blog/notes-on-database-sharding.tsx b/src/routes/blog/notes-on-database-sharding.tsx new file mode 100644 index 0000000..36313f4 --- /dev/null +++ b/src/routes/blog/notes-on-database-sharding.tsx @@ -0,0 +1,162 @@ +import { BlogPost } from "~/features/blog/ui/BlogPost"; +import { BlogParagraph } from "~/features/blog/ui/BlogParagraph"; +import { BlogParagraphSubsection } from "~/features/blog/ui/BlogParagraphSubsection"; + +export default function SettingUpSquarePaymentLinks() { + return ( + + + Sharding is a database architecture pattern related to horizontal + partitioning — the practice of separating one table’s rows into multiple + different tables, known as partitions. Each partition has the same + schema and columns, but also entirely different rows. Likewise, the data + held in each is unique and independent of the data held in other + partitions. There are many types of sharding strategies. + + + + Key or hash based sharding is very simple. It involves taking a value + from a record and hashing it and using that hash, assign a database + shard to put that record in. This is most often done with unique values + such as ids. + +
    +
  • Very easy to implement
  • +
  • + Keys are distributed evenly, assuming your hash function is sound +
  • +
+
+ +
    +
  • + Hard to add new/remove shards as you have to remap most if not all + keys to the total number of shards. +
      +
    • + For example if you're hash depends on the last two numbers of + an int and that int is 125 and you have 7 shards, so 25 % 7 = + 4, would mean you would have to totally remap if you removed a + shard so 25 % 6 = 1 +
    • +
    +
  • +
+
+
+ + + You may of noticed in the Key/Hash Based Sharding section that a lot + depends on your hash function being sound. However we can extend that to + drastically reduce the amount of keys that need to be remapped. With + consistent hashing only `n / m` keys need to be remapped on average + where *n* is the number of keys and *m* is the number of slots. It does + this by representing the system/server/clients as a virtual ring + structure called a hashring seen below. + hashring diagram + The hashring is said to have an infinite number of points you can place + servers on, really this depends on your the cardinality of the outputs + for your hash function but in practice it is true. Servers are often + placed after all of the keys are figured out to place servers where + there are the most current keys. +
+ When a request comes in it goes to a point in the hashring and goes + clockwise on the ring till it finds the closest server. If a server is + unresponsive it can hop to the next node to see if it has a copy. + hashring request flow diagram + +
    +
  • Very easy to add/remove servers
  • +
  • + Lessons the burden of serves failing as the keys it(or a new + server) needs to take on is less +
  • +
  • + Servers can easily and should store keys from other servers to + increase availability +
  • +
  • + Can easily further decrease possible hotspots by putting servers + on the hashring n times randomly with a new hash function +
  • +
+
+ +
    +
  • Complex
  • +
  • Increase overall server and memory usage
  • +
+
+
+ + + Range based sharding is where you take a range and assign it to a + database shard. Typically most useful when you have a fixed range. If + there is no range and they key maps one-to-one with the shard it's + called **Directory Based Sharding** and performs very similarly + +
    +
  • Very easy to implement
  • +
  • + If key source is purely random, keys are distributed evenly. +
  • +
  • Can more easily add/remove database shards
  • +
+
+ +
    +
  • + Keys, even if they appear or are said to be random are very often + not random. This will cause some shards to become hotspots and + have many more reads and writes than others. +
  • +
+
+
+ + +
    +
  • + When a dataset won't fit on a single server or write's overtake the + capacity of your server +
  • +
+
+ + +
    +
  • + You should only shard if the dataset cannot fit on one machine or + your write's are bottlenecking you, else you should handle load + through read-replicas as it reduces complexity, and increases + performance and durability +
  • +
  • + It also also very hard to go back once you shard your database +
  • +
+
+ + +
    +
  • + https://www.digitalocean.com/community/tutorials/understanding-database-sharding +
  • +
  • https://www.geeksforgeeks.org/consistent-hashing/
  • +
  • https://www.baeldung.com/
  • +
  • + https://ably.com/blog/implementing-efficient-consistent-hashing +
  • +
+
+
+ ); +}