<instructions>Your goal is to analyze the following comment and estimate how highly it will be upvoted by the Hacker News community.</instructions><comment><author>franckpachot</author><text>Citus is not close to Spanner. No global secondary indexes, no cross-shard ACID (the commit status is eventually consistent). No auto-resharding.
Yugabyte and Cockroach have a spanner-like architecture, but different open-source model and postgres-compatibility. What are those annoying issues?</text><parent_chain><item><author>endisneigh</author><text>It’s amazing that this isn’t a solved problem, but we have all of this crazy language model stuff.&lt;p&gt;Unfortunately Spanner isn’t open source. Yugabyte and Citus are close but have annoying issues. Cockroach isn’t 100% compatible (and has its own issues) and things like FoundationDB which are truly HA and comparable to Spanner in terms of consistency and fault tolerance are not easily plugged into Postgres as the underlying storage engine since sadly it’s only a key value store.&lt;p&gt;edit: when I say close, I&amp;#x27;m talking strictly about HA, not general functionality.&lt;p&gt;lately I&amp;#x27;ve been thinking of using FoundationDB, which is closest to Spanner in terms of ACID and serializability and mvsqlite.&lt;p&gt;Then, I was thinking, since SQLite doesn&amp;#x27;t have online schema changes (nor does mvsqlite) to have a schema such as:&lt;p&gt;&lt;pre&gt;&lt;code&gt;   [UUID, Data, Version, CreatedAt, UpdatedAt]
&lt;/code&gt;&lt;/pre&gt;
Where Data is a JSON or Proto and Version is an integer. You then could mimic an online schema change by in your application code supporting two adjacent &amp;quot;versions&amp;quot;, and then in an eventually consistent manner run [&lt;i&gt;small&lt;/i&gt;] transactions to update the Data to the new Version as necessary. You would index Version, and UpdatedAt as necessary to find the rows in the table that are not &amp;quot;migrated.&amp;quot;&lt;p&gt;In SQLite you can also create indexes on expressions so technically all of your JSON or Proto could also have indexes.</text></item></parent_chain></comment><story><title>Why PostgreSQL High Availability Matters and How to Achieve It</title><url>https://www.yugabyte.com/postgresql/postgresql-high-availability/</url></story>
<instructions>Your goal is to analyze the following comment and estimate how highly it will be upvoted by the Hacker News community.</instructions><comment><author>gen220</author><text>Doesn&amp;#x27;t Spanner depend on access to globally-synchronized custom atomic clock hardware? i.e. even if it were open source, it wouldn&amp;#x27;t really be valuable unless you&amp;#x27;re a data center operator.&lt;p&gt;As I understand it, it&amp;#x27;s not a solved problem because there is no silver bullet, but rather trade-offs in every direction, and which solution works for you (including Spanner) is heavily dependent on your use case.</text><parent_chain><item><author>endisneigh</author><text>It’s amazing that this isn’t a solved problem, but we have all of this crazy language model stuff.&lt;p&gt;Unfortunately Spanner isn’t open source. Yugabyte and Citus are close but have annoying issues. Cockroach isn’t 100% compatible (and has its own issues) and things like FoundationDB which are truly HA and comparable to Spanner in terms of consistency and fault tolerance are not easily plugged into Postgres as the underlying storage engine since sadly it’s only a key value store.&lt;p&gt;edit: when I say close, I&amp;#x27;m talking strictly about HA, not general functionality.&lt;p&gt;lately I&amp;#x27;ve been thinking of using FoundationDB, which is closest to Spanner in terms of ACID and serializability and mvsqlite.&lt;p&gt;Then, I was thinking, since SQLite doesn&amp;#x27;t have online schema changes (nor does mvsqlite) to have a schema such as:&lt;p&gt;&lt;pre&gt;&lt;code&gt;   [UUID, Data, Version, CreatedAt, UpdatedAt]
&lt;/code&gt;&lt;/pre&gt;
Where Data is a JSON or Proto and Version is an integer. You then could mimic an online schema change by in your application code supporting two adjacent &amp;quot;versions&amp;quot;, and then in an eventually consistent manner run [&lt;i&gt;small&lt;/i&gt;] transactions to update the Data to the new Version as necessary. You would index Version, and UpdatedAt as necessary to find the rows in the table that are not &amp;quot;migrated.&amp;quot;&lt;p&gt;In SQLite you can also create indexes on expressions so technically all of your JSON or Proto could also have indexes.</text></item></parent_chain></comment><story><title>Why PostgreSQL High Availability Matters and How to Achieve It</title><url>https://www.yugabyte.com/postgresql/postgresql-high-availability/</url></story>