High Performance PostgreSQL for Rails Beta Reliable Scalable Maintainable Database Applications Andrew Atkinson download
High Performance PostgreSQL for Rails Beta Reliable Scalable Maintainable Database Applications Andrew Atkinson download
https://ebookname.com/product/high-performance-postgresql-for-
rails-beta-reliable-scalable-maintainable-database-applications-
andrew-atkinson/
https://ebookname.com/product/designing-data-intensive-
applications-the-big-ideas-behind-reliable-scalable-and-
maintainable-systems-martin-kleppmann/
https://ebookname.com/product/crafting-rails-applications-expert-
practices-for-everyday-rails-development-1st-edition-jose-valim/
https://ebookname.com/product/postgresql-high-availability-
cookbook-2nd-edition-shaun-m-thomas/
https://ebookname.com/product/oil-a-cultural-and-geographic-
encyclopedia-of-black-gold-2-volumes-li/
Mastering Personal and Interpersonal Skills Key
Techniques for Effective Decision Making and Personal
Success 1st Edition Peter F. Haddon
https://ebookname.com/product/mastering-personal-and-
interpersonal-skills-key-techniques-for-effective-decision-
making-and-personal-success-1st-edition-peter-f-haddon/
https://ebookname.com/product/crossing-the-rubicon-the-decline-
of-the-american-empire-at-the-end-of-the-age-of-oil-michael-c-
ruppert/
https://ebookname.com/product/a-farewell-to-arms-beyond-the-good-
friday-agreement-2rev-ed-edition-michael-cox/
https://ebookname.com/product/james-bridie-clown-and-philosopher-
helen-l-luyben/
https://ebookname.com/product/developmental-neuroscience-2nd-
edition-donald-j-cohen/
Green s Functions and Linear Differential Equations
Theory Applications and Computation 1st Edition Prem K.
Kythe
https://ebookname.com/product/green-s-functions-and-linear-
differential-equations-theory-applications-and-computation-1st-
edition-prem-k-kythe/
ß
Under Construction: The book you’re reading is still under
development. As part of our Beta book program, we’re releasing
this copy well before a normal book would be released. That
way you’re able to get this content a couple of months before
it’s available in finished form, and we’ll get feedback to make
the book even better. The idea is that everyone wins!
Be warned: The book has not had a full technical edit, so it will contain errors.
It has not been copyedited, so it will be full of typos, spelling mistakes, and the
occasional creative piece of grammar. And there’s been no effort spent doing
layout, so you’ll find bad page breaks, over-long code lines, incorrect hyphen-
ation, and all the other ugly things that you wouldn’t expect to see in a finished
book. It also doesn't have an index. We can’t be held liable if you use this book
to try to create a spiffy application and you somehow end up with a strangely
shaped farm implement instead. Despite all this, we think you’ll enjoy it!
Send us your feedback: In the meantime, we’d appreciate you sending us your
feedback on this book at pragprog.com/titles/aapsql/errata, or by using the links
at the bottom of each page.
Andrew Atkinson
All rights reserved. No part of this publication may be reproduced, stored in a retrieval system,
or transmitted, in any form, or by any means, electronic, mechanical, photocopying, recording,
or otherwise, without the prior consent of the publisher.
ISBN-13: 979-8-88865-038-7
Encoded using the finest acid-free high-entropy binary digits.
Book version: B1.0—August 30, 2023
Contents
Change History . . . . . . . . . . . . ix
Preface . . . . . . . . . . . . . . xi
Maybe your application has grown in popularity and you’ve got performance
problems. Maybe your database has ballooned in size and you aren’t sure
how to manage the growth. In the market, the traditional Database Adminis-
trator role is declining in popularity while there are more database-backed
web applications than ever. Organizations from startups to huge companies
choose PostgreSQL as a mission critical database to build their businesses
on. Operator challenges, especially under high growth and high query volume,
can put a lot of pressure on the engineering team. Why not be the team
member who takes on these challenges?
Get ready to develop useful skills for operating PostgreSQL that you can
immediately put to use. You’ll use the latest versions of PostgreSQL and Ruby
on Rails. You’ll work on making your applications and databases faster, more
reliable, and more resilient. As you work towards mastery of high performance
operations, you’ll raise the bar for operational excellence for your PostgreSQL
database and your engineering team.
As you go through the book’s exercises, you’ll work with a real Rails application
and database schema that you can see and continue to evolve as a test lab
for your skill development. You’ll populate millions of rows of data to work
with, to help simulate your production workload. In addition to the core
functionality of PostgreSQL and Ruby on Rails, you’ll be working with 50
Ruby gems and PostgreSQL extensions.
and Rails application codebases is mission critical for the success of your
business. Your team members expect you to both build with and operate
these technologies, managing huge data growth, shifting business priorities,
and operating reliable and cost efficient infrastructure.
Here you’ll work exclusively with the open source community distribution of
PostgreSQL. Sticking with locally installed community distribution of Post-
greSQL allows readers to gain confidence by developing and testing locally.
After getting in some practice, readers can take their skills into production.
1. https://laravel.com
2. https://www.djangoproject.com
3. https://www.oreilly.com/library/view/postgresql-up-and/9781449326326/
Internals of PostgreSQL are not covered beyond some basics as needed for a
chapter. Multiversion Concurrency Control (MVCC) and Isolation Levels for
example are introduced with some basic information and readers are direct
to the PostgreSQL documentation for more information.
User Administration, Roles, and Privileges are not covered. The GRANT command
and Security concepts like Row Level Security (RLS) and Policies are not cov-
ered.
For concepts like Recovery Time Objectives (RTO) and Recovery Point Objec-
tives (RPO), consider the book Database Reliability Engineering6 which
focuses on building reliable database systems.
In the broader PostgreSQL ecosystem, there are many options beyond what
is supported in the open source community distribution where you’ll run
PostgreSQL on your local server instance. There are PostgreSQL forks, Post-
greSQL compatible databases, and PostgreSQL extensions that make very
significant modifications to how PostgreSQL operates. For example, the Citus
11.1 open source release7 modifies PostgreSQL as an extension. Although
extensions like Citus do offer portions of their offerings as open source soft-
ware, in general forks and different databases engines with compatibility are
outside the scope of this book.
4. https://pragprog.com/titles/rails7/agile-web-development-with-rails-7/
5. https://pragprog.com/titles/ruby5/programming-ruby-3-2-5th-edition/
6. https://www.oreilly.com/library/view/database-reliability-engineering/9781491925935/
7. https://www.postgresql.org/about/news/announcing-citus-111-open-source-release-2511/
In the earlier days of Ruby on Rails and the Active Record ORM there was an
emphasis on portability, where web applications might migrate from one
database management system to another. Portability has been deemphasized
over the years. Community blog posts and conference talks regularly feature
capabilities that are exclusive to PostgreSQL.
Rails continues to add support for PostgreSQL capabilities to each new release.
Generated Columns from PostgreSQL 12 were added as Virtual Columns10
to Active Record.
In Rails 7.1 support for Common Table Expressions (CTE) queries were added
to Active Record.
With native support for Multiple Databases, Ruby on Rails and Active Record
can be used with multiple PostgreSQL databases working together. Multiple
databases can be paired up using physical replication for Read and Write
splitting, or multiple writeable databases can be used from the application
for application level sharding. You’ll see and configure both of these.
We know skills with Ruby on Rails are in demand. What about PostgreSQL?
8. https://hired.com/state-of-software-engineers/2023/
9. https://guides.rubyonrails.org/active_record_postgresql.html
10. https://blog.saeloun.com/2022/01/25/rails-7-postgres-support-for-generated-columns.html
Besides the Rails Hosting Survey, the DB-Engines Ranking12 ranks the most
popular databases in the world. PostgreSQL has been a three-time #1 Winner
there in 2017, 2018, and 2020.
In 2021, PostgreSQL was the second most popular database, being a runner-
up to Snowflake.13
In 2022, PostgreSQL was the winner of the third most popular database.
Snowflake and Google BigQuery14 were #1 and #2 but neither are used for
OLTP.
The 2022 Stack Overflow Developer Survey15 gathered input from nearly
50,000 Professional Developers. When the developers were asked what
database they used most, PostgreSQL took the #1 spot.
11. https://rails-hosting.com/2022/#databases
12. https://db-engines.com/en/ranking
13. https://www.snowflake.com
14. https://cloud.google.com/bigquery
15. https://survey.stackoverflow.co/2022/#most-popular-technologies-database-prof
Getting Started
CHAPTER 1
The best way to learn is from hands on practice and experimentation. Here
you’ll work on exercises using practical examples, with a Rails API app con-
nected to PostgreSQL. You may want to challenge yourself on topics you’re
familiar with to build your own examples. Growth happens when solving
challenges just beyond your current skill level.
In this chapter, you’ll primarily get things installed and set up. You may have
a lot of experience with Ruby on Rails and less or none at all with PostgreSQL.
On the PostgreSQL side, you may be an experienced administrator but know
little about Ruby on Rails, or perhaps use another popular web framework.
Here you’ll get information wherever you fall in those skill areas.
The Ruby on Rails app you’ll use here is called Rideshare, and it’s proudly
configured to work with PostgreSQL. This is a open source Rails application
that’s available to download from GitHub.
What Is Rideshare?
Rideshare is an API-only web application that implements a portion of a fic-
tional ridesharing service. Think of Uber or Lyft. Imagine there could be mil-
The core nouns you’ll work with are Drivers, Riders, Trips, and Trip Requests.
These are Active Record models that are backed by database tables.
Active Record works with many naming conventions that are important to
know. Models use a singular form for names like “Driver” in memory but by
convention are persisted into a table with a pluralized name like drivers. The
Convention Over Configuration design principle that’s a code aspect of Ruby
on Rails means that things like a table name in a model does not need to be
configured explicitly.
When you’re working with a new Rails application, explore the db/structure.sql
file and any available diagrams like ERDs, to begin to learn about the tables,
indexes, and constraints.
1. https://github.com/andyatkinson/rideshare/blob/master/erd.pdf
If you’re newer to Rails, you might be wondering how changes are captured
in the db/structure.sql file. When a developer makes a schema modification,
behind the scenes Ruby on Rails when configured for PostgreSQL uses pg_dump
to dump the table structure to db/structure.sql.
Within the Ruby source code file, schema modifications can be written in SQL
as well. Do Rails Migration files only contain structural changes, aka Data
Definition Language (DDL)? No, there aren’t any limitations on them, so
developers can perform Data Modification Language (DML) statements in the
form of inserting, updating, or deleting data. However, it’s considered a good
practice to use Migrations only for DDL and use Rake tasks or other mecha-
nisms for DML.
Does the db/structure.sql contain only structural data about the schema?
Although nearly all of the content of the file is purely structural, there is one
exception. At the bottom of the file there is “data”. The versioned Migration
files each have a unique number. The number is inserted into the developer’s
database when the Migration runs.
How is this tracked then? When the structure file is dumped, it’s dumped
based on the developer’s database, so any migrations that have been applied
there are dumped as INSERT statements. The schema migrations are dumped
as INSERT statements so that the database structure can be replicated on
another database by running bin/rails db:schema:load.
What this task does is load the content from the structure file and then insert
all the same migration versions into the destination database. That way if
another migration comes in after that one with a version number that doesn’t
exist, the database knows which versions have already been applied and will
apply only the new ones.
That was a quick refresher on how Active Record Migrations manage the
PostgreSQL database structure, how developers make incremental schema
modifications, and how those modifications are tracked.
When you clone the Rideshare application and “migrate” (a verb in Rails
speak) the database, you’ve evolved your database schema to be in sync with
the latest production version.
Now that you have an idea of what the Rails application is, how the database
structure evolves and how to get a copy of the structure, you’ll want some
data.
You’ll use a couple of ways to get data into your database. To make it easy
to get started, you can use a pre-made data dump that can be downloaded
and loaded.
Then you’ll learn how to populate even more data via scripts that are part of
the Rideshare codebase.
It’s time to get Rideshare set up locally so you can explore the source code
and start the database server and web server.
Installing Rideshare
Begin by installing the dependencies needed to run Rideshare. Once the
dependencies are installed you’ll install the Rideshare application.
The examples here were developed on Mac OS, using the latest released ver-
sions of Ruby on Rails and PostgreSQL at the time of writing; these are listed
below.
• Mac OS Ventura
• Ruby on Rails 7 (Released 2021)
• PostgreSQL 15 (Released 2022)
Run the rails executable that’s part of the application by running bin/rails from
the root directory of Rideshare. You’ll use bin/rails to run commands like console,
server, and runner. You might see instructions to install Rails using gem install
rails. This method will make a rails executable available, but don’t use this
version for these exercises.
By the end you’ll have Rideshare fully running locally for development, con-
nected to a PostgreSQL database server instance.
Along with the PostgreSQL server installation, you’ll get additional PostgreSQL
Client Applications like pg_dump and psql2.
After installing PostgreSQL in one of the ways above, check the versions of
your client programs. This helps you verify they’re installed properly. Run
the following commands from your Terminal.
psql --version
pg_dump --version
With your PostgreSQL server instance started, open up your terminal and
type psql to connect to a default database that matches your OS username,
as a user (role) that’s your username. If your Mac OS username is andy (type:
whoami) without any arguments to psql, it will try and connect to a database
called andy with a user andy. If you see a psql prompt, you know you’re con-
nected. You may type SELECT current_database(); to view the current database
you’re connected to. Type \q to quit.
With your PostgreSQL server instance running, and being able to connect to
it for any database, you’re ready to proceed to work on getting the Ruby lan-
guage installed, and then the Rideshare Rails app installed.
2. https://www.postgresql.org/docs/current/reference-client.html
The Ruby version manager called rbenv3 is a good choice. In this section you’ll
install rbenv and the version of Ruby that’s needed for Rideshare.
After Ruby is installed you’ll install the Bundler gem.4 Bundler will take care
of all the other dependencies needed. If you’re new to Rails it may be a little
daunting to get started, but this combination of Ruby Version, Bundler, and
running bundle install to install all the other gems needed is a common pattern.
In Ruby, third party shared library code is packaged and managed as a Ruby
gem. Ruby gems have an official website and repository, https://rubygems.org,
where you’ll find loads of gems and some statistics about their usage.
Ruby on Rails and PostgreSQL are supported in local development for both
Linux and Windows, but you’ll need to find your own installation and devel-
opment guides for those.
Run the following brew command from your terminal to install rbenv and ruby-
build.
To verify these are installed, you may run rbenv --version and ruby-build --version.
With rbenv installed and Ruby versions available, you’re ready to install the
Ruby version needed for Rideshare.
3. https://github.com/rbenv/rbenv
4. https://bundler.io
5. https://brew.sh
Type ruby -v and confirm the version matches the version in .ruby-version,
which was 3.2 at publication time. Install the bundler gem by typing gem
install bundler. This is the one gem you’ll install using gem install. Type bundler
--version to confirm version 2 or greater is installed.
If you run into errors, please open an Issue on the project. A common
error occurs when installing gems like pg that have native code dependen-
cies, and the native code is not accessible. If you run into issues installing
the pg gem, see the Appendix for more information.
4. If all gems were installed successfully, you’re ready to set up the database.
From your terminal:
Use bin/rails db:create to create the development and test databases. The
PostgreSQL server must be running. Using this technique will create a
database role (user) named the same as your Mac OS user.
6. To run the test suite for Rideshare, run bin/rails test in the Rideshare
directory from your terminal.
With Rideshare now installed and configured, you can begin to work with
your local PostgreSQL database.
In the exercises here you’ll work exclusively using your local version of Post-
greSQL running the open source community distribution. You’ll get some
repetition in by regularly developing and testing in your local database. Your
local PostgreSQL database will have less functionality compared with modern
cloud hosted PostgreSQL instances, but it will be less complex and you’ll have
full control over it. You’ll use your local instance to develop skills you can
take with you into your production instance.
You’ll view log files, modify parameters, and start and stop your server
instance. Since you’re working locally on PostgreSQL, any queries or processes
are in your control and you may restart it at will. In production a database
restart requires careful planning and is generally avoided. Thus, you’ll practice
“reloading” configuration changes where possible to avoid restarts.
Some terms you’ll run across are relations, tuples, bloat, and the optimizer.
A relation refers to a table. Tuples are versions of rows in tables. Bloat has to
do with inefficient data layout, where data is stored in a fragmented way and
this fragmentation can add latency to operations. These very brief definitions
are a starting point for exposure to these terms.
In PostgreSQL, data is laid out in pages. Data cannot be split across pages.
Data is stored efficiently when there are minimal gaps and data that is
accessed resides within a single page. Data that’s in a single page requires
fewer disk operations compared with accessing data that is split across mul-
tiple pages.
PostgreSQL works whether data is stored efficiently or not. Data may not fit
in a single page, may be split across pages, and there may be a low correlation
for a query. You will explore these concepts.
You specify the columns from the tables you want, and PostgreSQL determines
an optimized retrieval algorithm using knowledge of the data layout, database
objects, available hardware resources, and more.
PostgreSQL creates query execution plans on the fly to fulfill what you’ve asked
for. Multiple plans are pitted against one another. The plans are formed using
estimates about data in tables, so the plans aren’t always flawless but are
generally pretty good. As the programmer, you can see what PostgreSQL is
planning and influence it. You’ll learn more about that later on.
This plan evaluation process is conducted nearly instantly by the query exe-
cution planner, which is also referred to as the optimizer.
* * * * *
The little summer house was still undisturbed by the rude, annoying
outer world; but its atmosphere had subtly changed. A chill wind
blew through the shrubbery and the fragrance of bush and flower
was gone. Even the sun, as if he could not bear to look, had
dropped behind the hill; for something had edged between the
lovers.
Bessie's artless words made John remember as very, very near,
what, during this delicious hour in her presence, had seemed to be
worlds and worlds behind him, in fact made him feel his shame and
guilt so deeply that he could no longer hold her in his arms. Then
the story of his infatuation for Marien Dounay came out, as he had
always felt it must, sometime, for the purging of his own soul, even
if it were she who would suffer most,—the old, old law of vicarious
suffering again!
Bessie listened with white, set face, while John resolutely spared
himself nothing in the telling, but when the look of hurt and pain
took up its abode permanently in those mild blue eyes, a feeling of
yet more terrible misgiving overtook him and he would have checked
the story if he could. But once started, his natural shrinking from
hypocrisy compelled him to tell the truth.
"You can never know how I have reproached myself for it," he
concluded. "I have suffered agonies of remorse. Wild with love of
you, and the impulse to declare that love, I have stayed away six
months. It seemed to me at first that I could hardly get my own
consent to come at all from her to you; that I must doom myself to
perpetual loneliness to expiate my sin. And yet, Bessie," John made
the mistake of trying to extenuate, "it was probably not altogether
unnatural, knowing man as I begin to know him."
To the young girl, facing the first bitter disillusionment of love, it
came like a flash of intuition that this last was true; that men were
like that—all men! They were mere brutes! This intuition maddened
the girl, and her disturbed emotions expressed themselves in a burst
of flaming anger.
"You may go back to Marien Dounay," she exclaimed hotly. "I do
not want her left-overs."
"But," protested John, with something of that sense of injury
which a man is apt to feel if forgiveness does not follow soon upon
confession, "you do not understand!"
"I understand," retorted Bessie with blazing sarcasm, "that you
fell hopelessly in love with this woman; that you embraced her,
kissed her, worshipped the ground she trod on; that you proposed to
marry her almost upon the spot; that she refused you and drove you
from her; that for a month you wrote me letters of hypocritical
pretense; that when she finally not only repulsed you but revealed
herself to you as a woman without character, you considerately
revived your affections for me."
John felt that in this storm of words some injustice was being
done him; yet he could not deny that such an outburst of wrath
upon Bessie's part was natural, and he humbled himself before the
blast.
In the vehemence of her demonstration, Bessie had arisen, and
after the final word stood with her back to her lover, looking out
upon the little lake which suddenly seemed a frozen sheet of ice.
"Bessie!" John murmured huskily, after an interval.
"Don't speak to me, don't!" she commanded hoarsely, without
turning her head.
John obeyed her so humbly and so completely that she began
to wonder if he were still there, or if he had sunk through the
ground in the shame and mortification which she knew well enough
possessed him.
When she had wondered long enough, she turned and found
him not only there but in a pose so abject and utterly remorseful
that her heart softened until she felt the need of self-justification.
"You were my god," she urged. "You inspired me! I worshipped
you! I thought you were as fine a man as my own father—and finer
because you had a finer ambition. I thought you were grand, noble,
strong!" Bessie stopped with her emphasis heavy upon the final
word.
"Is not the strong man the one who has found in what his
weakness lies?" John pleaded humbly.
But as before, his attempt at palliation seemed to anger her
unaccountably, and she turned away again with feelings too intense
for utterance—with, in fact, a dismal sense of the futility of
utterance. She wanted to get away from John. She wished he would
not stand there barring the door. She wished he would go while her
back was turned. A sense of humiliation greater than had possessed
him, she was sure, had come over her. If the lake in front had been
sixty feet deep instead of six inches, she might have flung herself
into it.
"But you love me!" pleaded John from behind her, his voice
coming up out of depths.
"Do you think I would care how many actresses you lost your
dizzy head over if I didn't?" retorted Bessie petulantly, and instantly
would have given several worlds to recall the speech.
"No! No!" she continued, stamping her foot angrily, "I don't love
you, I love the man I thought you were."
"All the same, I love you," groaned John, rising up to proclaim
his passion hoarsely and then flinging himself again upon the bench,
where with head hanging despondently, he continued: "I love you,
and I don't blame you for hating me, and you can punish me as long
as you want and in any way you want. You can even try to fall in
love with some one else if you like. Marry him if you want to. I love
you, and I'll keep on loving you. No punishment is too great for the
thing I've done."
The effect of this speech on the outraged Bessie was rather
alarming to that indignant young lady. When John began to heap the
reproaches higher upon himself, she felt a return to sympathetic
consideration for him that was so great she dared not trust herself to
hear more of them.
"Take me home!" she commanded hurriedly, walking swiftly by
him, but with scrupulous care that the swish of her white skirts
should not touch the bowed head as she passed, and no more
trusting herself to a second glance at that dejected tawny mop of
hair than to hear more of his self-indictment.
CHAPTER XVIII
THE HOUSE DIVIDED
After parting from Bessie at her father's door, John spent twenty-four
hours in dumb agony at his hotel, devoting much time to uncounted
attempts to frame a letter to her. But the one which finally went by
the hands of a messenger was a mere cry that broke out of his
heart. All it brought back was an answering cry,—four pages with
impetuous words rioting over them. There were splotches of ink
where the pen had been urged too recklessly, and as John held it up
to the electric light, he tried to imagine there were watery stains
upon it.
That night Hampstead left Los Angeles for San Francisco and
spent an aimless Saturday brooding upon the ocean beach, needing
no sight of the jutting Cliff House rocks upon which his lips had first
touched Bessie's to embitter his reflections. Sunday morning,
however, as early as nine o'clock, found him threading the graveled
paths of the little park in Encina, and taking his place upon the rustic
bench across from the dingy chapel. The cleat remained on the door.
God was still nailed up!
John could not help thinking that he, too, was rather nailed up.
Drawing Bessie's last letter from his pocket, he held it very tenderly
for a time in his hand, then opened it to the final paragraph, which
his eyes read dimly through a mist that overspread his vision like a
curtain of fog.
"I shall always love you, John," her pen had sobbed, "—always;
or at least, it seems so now. But you have hurt me in what touches a
woman nearest. I have tried to understand—I think I have forgiven
—but that full confiding trust!—Oh, John!"
The letter didn't cut off hope exactly; but it didn't kindle any
bonfires, either. As John read it, he felt forlorn and helpless, and
perceived that he had made rather a mess of things generally.
And, in the meantime, there was absolutely nothing more
important for him to do than to sit on the park bench before this
wretched-looking, dishonored little church and watch to see whether
any children came to Sunday school.
Yes,—two were coming now. One was a little girl of six or
seven, in a smock immaculately white. She was bareheaded, but her
flaxen locks were bound with a bright blue ribbon that just matched
the blue of her eyes. Her stockings were white, and her shoes were
patent leather and very shiny. She walked with precise, proud steps,
and looked down occasionally at the glinting tips of her toes to make
sure that they were still unspotted. Once she stopped and touched
them daintily with the handkerchief she carried in her hand, and
then glanced up and around swiftly with a guilty look.
By her side walked little brother. He might have been four. He
might have been wearing his first pants; his feet might have been
uncomfortable; the elastic cord on his hat might have been pinching
his throat most irritatingly, and probably was; but for all of that he
trudged along sturdily, as careful of his four-year-old dignity as his
sister obviously was of her motherly office.
He stretched his legs, too, to take as long steps as she, which
was not so difficult, because his sister minced her gait a little.
Together they swung around the corner, and their feet pattered
on the board walk leading across the sod to the chapel. Involuntarily
they stopped a moment where Elder Burbeck had borrowed the
plank, then stepped over the hole and mounted with confident,
straining steps to the platform. The sister was now a little in
advance, one hand holding her brother's and lifting stoutly as he
struggled to surmount the unnatural height.
But the door of the church was closed. This nonplussed the little
lady for just a second, after which she thrust up her chubby hand
and gave the knob a turn. The door did not respond. She rattled the
knob protestingly, and then, looking higher, saw the plank nailed
across.
At this the small miss stepped back confounded, to the
accompaniment of childish murmurings. Little brother did not
understand. He clamored to be admitted to his "Sunny Kool." The
little woman tried again, but the door baffled her most indifferently.
However, after a moment of wondering dismay, this tiny edition of
the feminine retreated no farther than to turn and sit down upon the
steps, first dusting them carefully, and inducing little brother to sit
beside her. Strength had been baffled, but faith was still strong.
"The eternal woman!" commented John reverently. "So Mary
waited at the tomb."
But other children were coming, and soon a fringe of little
bodies was sitting around the platform, and soon a border of little
feet decorated the second step, the girls' feet neatly, daintily
composed; the boys' feet restless, clumsier, beating an insistent
tattoo as they awaited the appearance of some grown-up who could
admit them or explain.
"Teacher! Teacher!"
One little girl set up the shout, and like a bevy the smaller
children swarmed across the street and into the park to meet a very
slender girl, perhaps sixteen years of age, with her light brown hair
in half a dozen long, rolling curls that, snared at the neck by a wide
ribbon, hung half way down her back.
Attended eagerly by this childish court, the babble of their
voices rising about her, the girl mounted the steps, stood a moment
in confusion before the locked and barred door, then looked about
her helplessly, almost as the children had done.
"This is my cue," John declared with decision, rising from his
seat and crossing to the chapel.
"My name's Hampstead," he began, taking off his hat to the girl.
"I belong to the First Church, Los Angeles."
"How do you do, Brother Hampstead," she responded, in a voice
that expressed instant confidence, while her large eyes, blue as the
sky, lighted with pleasure and relief. "I am Helen Plummer, teacher
of the infant class."
"You seem to be embarrassed," John proceeded.
"Whatever shall I do?" confessed the young lady, looking at the
barred door, at her charges about her, and at John.
John laid his hand upon the plank at the end where it projected
beyond the edge of the little, coop-like vestibule, and gave it a
tentative pull. It did not spring much. Burbeck's nails had been long,
and he had driven them deep. But John was strong. He swung his
weight upon the end of the plank and it gave a little. He swung
harder, and it yielded more. Presently he heard a squeaking,
protesting sound from the straining nails, and increased his efforts
till the veins knotted on his forehead.
"Bet y' he can't," speculated an urchin whose chubby toes were
frankly barefoot and energetically digging into the sod of the lawn.
"Bet yuh he will," instantly countered another, shifting his gum.
"Oh, I do hope you can!" sighed the fairy thing with the curls
down her back and the eyes like the sky.
That settled it for John. This plank was coming off.
Nevertheless, there was a pause while he mopped his brow and
considered. The result of these considerations was to fall back for
reinforcement on two cobbles of unequal size chosen from the
gutter, the larger of which he used as a hammer while the smaller
served as a wedge, till, with a final wrench, the plank came free.
But Elder Burbeck had locked the door.
"A hairpin?" queried John of the sky blue eyes.
"I have not come to hairpins yet," blushed the teacher of the
infant class.
John remembered the buttonhook on his key ring, and after a
few moments of vigorous attack with that humble instrument the
bolt shot accommodatingly to one side and the door swung open.
"Thank you so much!" exclaimed the blue eyes, though the red
lips of pliant sixteen said never a word, but framed themselves in a
very pretty smile.
John acknowledged the smile with one of his broadest. At the
same time, he reflected that Miss Helen's failure to regard as
seriously unusual either the barred door or its violent opening was
significant of the state to which affairs in the little church had come;
and it was with a grim sense of duty well performed that the big
man followed the trooping children into the chapel and looked about
him.
The building was small, yet somehow it appeared larger inside
than out. The utmost simplicity marked its furnishings. The seats
were divided by two aisles into a central block of sittings and two
side blocks. The pulpit was a mere elevated platform at one side,
flanked by lower platforms, one of which supported a cabinet organ.
The dull red carpet upon the floor was dreary looking; but the walls
and ceilings were neatly white, giving a suggestion of lightness and
cheer quite out of harmony with the circumstances under which
John had entered it.
The twenty or more children massed themselves, as if by habit,
upon the front seats, and presently, with Helen at the organ,
Hampstead had them singing lustily one song after another, while
the size of the audience increased by occasional stragglers until,
during the fourth song, two women appeared, each rather
breathless, and one with unmistakable evidences of having got
hurriedly into her clothes. John felt the eyes of the women upon him
suspiciously, and noticed that neither spoke to the other, and that
they took seats on opposite sides of the church.
At the end of the song, he walked over to the older of the two
ladies, who somehow had the look of a wife and mother in Israel,
and said:
"My name's Hampstead,—First Church, Los Angeles."
"I'm Sister Nelson," replied the lady, a trifle stiffly. "I teach a
class of boys. But I thought the church was closed till I heard the
organ. Are you a minister?"
"Me? No!" And John smiled at the thought, but he also smiled
engagingly. Mrs. Nelson instantly liked and accepted him and
allowed her stiffness to melt somewhat.
"I just happened in," John explained, as he turned to cross
toward the young lady on the other side, who appeared, he thought,
to eye him rather more suspiciously after such cordial exchange with
Mrs. Nelson.
"My name's Hampstead," he began. "First Church, Los Angeles.
I just happened in."
"I'm Miss Armstrong," replied the lady, with conviction, as if it
were something important to be Miss Armstrong. "I was teaching a
class of girls before Brother Aleshire left; or rather, was driven
away!" and the lady darted a look that ran across the little
auditorium like a silver wire straight at the uncompromising figure of
Sister Nelson. "I thought there wasn't to be any Sunday school until
I heard the organ."
"Guess I'm responsible for that," replied John. "I just kind of
butted in."
Miss Armstrong did not ask John if he were a minister. She knew
it was unnecessary after he said "butted in." But she also felt the
warmth of his engaging smile and yielded to it after a searching
moment, for he really did look like a well-meaning young man.
Before the pulpit, and in front of the central block of chairs
where the children were gathered, was a huge irregular patch in the
carpet. This patch was about mid-way between the two outer plots
of chair-backs, in the midst of one of which, like a solitary outpost,
sat the watchful Mrs. Nelson, while Miss Armstrong performed grim
sentinel duty in the other.
To this patch in the carpet, as to the security of neutral ground,
John returned after establishing his identity and status with the two
ladies, and from that safely aloof position, after a moment of
hesitancy, ventured to announce:
"Since we seem somewhat disorganized this morning, I suggest
that Sister Nelson take all the boys, and Sister Armstrong take all the
girls, while Miss Helen will take the little folks, as usual."
It was evident from their respective expressions that Mrs.
Nelson did not know about this idea, and that Miss Armstrong also
had her doubts; but the children settled it. The tots rushed for the
small platform on the left of the pulpit which had some kindergarten
paraphernalia upon it, while the larger boys charged for Sister
Nelson and began to arrange the loose chairs in a circle about her.
The larger girls made the same sort of an advance upon Miss
Armstrong.
Within five minutes, preliminaries were got out of the way,
heads were ducked toward a common center, and there rose in the
little church that low buzz of intense interest, possibly more
apparent than real, which an old-fashioned Sunday school gives off
at recitation period, and which is like no other sound in the world in
its capacity to suggest the peaceful, bee-like hum of industry and
contentment.
Standing meditatively in the center of the open space before the
pulpit, thrilling with pleasure at the situation, feeling somehow that
he had created it, John heard with apprehension a quick heavy step
in the little entry, saw the swinging inside doors give back, and
observed the stern, red face of Elder Burbeck confronting him across
the backs of the middle bank of chairs.
The Elder had a fighting set to his jaw; he had his undertaker
hat upon his head; and he glared at John accusingly as if he
instantly connected him with the policy of the open door. But as if to
make sure first just what mischief had resulted, Elder Burbeck's
glance swept the room, taking in by turns Miss Armstrong with her
girls, Sister Nelson with her boys, and Miss Helen with her
kindergarteners.
As the Elder gazed, his expression changed perceptibly, and he
reached up and took off his high hat, lowering it slowly, but
reverently.
John, who had been standing perfectly still upon the patch,
meek but unabashed, experienced an odd sensation as he witnessed
this manoeuvre. It was dramatic and as if some presence were in
the room which the Elder had not expected to find there. Yet,
notwithstanding this, the apostle of the status quo turned level,
accusing eyes upon John across the tiers of chairs, and began to
advance down the aisle upon the right where Sister Nelson had
seated herself. John, at the same moment, began a strategic
forward movement upon his own account, so that the two met
midway.
"You broke open the house of the Lord," charged Elder Burbeck
sternly.
"You nailed it up," rebutted John flatly, his features grave and
his whole face clothed in a kind of dignity that to Elder Burbeck was
as disconcerting as it was impressive.
"You nailed it up," rebutted John flatly.
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
ebookname.com