ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

Transactional Information Systems 5章 MVCC勉強会 第八回 議論メモ

勉強会について

Transactional Information Systems 5章 MVCC勉強会 第八回 - connpass の議論メモです。

自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。

特記の無い引用は本で議論した箇所を示しています。

Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery (The Morgan Kaufmann Series in Data Management Systems)

Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery (The Morgan Kaufmann Series in Data Management Systems)

5.5.3 The MVSGT Protocol

MVSGT はトランザクション (TX) の理解度を確認するためのテストになる。
MVSGT の節がすんなりと理解できれば TX を理解できているといえる。
MVSGT の節を読めないなら全然わかっていないということ。最初から勉強をやり直す必要がある。

deterministic step とは read/write の順序が一発で与えられる。
nondeterministic step は deterministic の排他関係にある。

G will contain all edges from the conflict graph plus a few additional ones,

additional なのは version order。

Assume that ri(x) arrives at the scheduler; candidates from which ti can read are t0 as well as all wj(x), which have already been scheduled.

read に何を読ませるかを考える。これまでは直前を読んでいた。ここではもっと柔軟に割り当て可能だ。

already been scheduled とは history の order が前にあるはず、と言っている。

read できるものを考えるにあたり、wj(x) ri(x) のケースを考える。

1. those tj on a path that originates from ti, since these are supposed to follow ti in an equivalent serial schedule; let us call them late;

先行している tj の write を 後続の ti は物理的には read できるが、conflict graph に ti → tj があるなら、循環を避けるために read してはいけない。

2. those tj for which a path exists from tj to another candidate tk that writes x and from tk to ti, since in an equivalent serial schedule, tk writes x after tj; let us call them early.

conflict graph に tj → tk, tk → ti がある。また、tk が write している。
tj の write を ti は read したいが、tk が割り込んでいるため read できない。

1. If wi(x) is executed, an edge of the form (tj, ti) is added to the graph for each tj for which an rj(x) has already been scheduled; in this way, G remains a supergraph of the MVSG. If G becomes cyclic, then wi(x) is not executed; otherwise the version newly written is kept.

rj(x) の後ろに wi(x) を持っていく。既に読んでいる read の RF を壊さないため。


以降、TX本の範囲を超えた議論のメモ。

MV で write - write は conflict free と考えていたが、実はそうではないかもしれない。未来で order を決めないといけないということは、それが conflict を潜在的に持っているといえるのでは、という気がする。

CSR はこの潜在的な conflict を lock によって解消(というより order を決めてしまう)しているのではないか。この conflict の order を後で決めるコストを考えると、lock で解消するのは低コストな手段の一つなのかもしれない。

これまでの lock は限られたリソースをうまく取り合うために使われてきた。
これからの lock は conflict を顕在化させるために使うことになるのかもしれない。

TX本はPapadimitriou本(※)を要約している。TXを学ぶのであればPapadimitriou本を持っておくべき。

(※)Papadimitriou本

Theory of Database Concurrency Control

Theory of Database Concurrency Control

Amazon.com(アメリカ)でマーケットプレイスの出品者に一部返金交渉~合意するまでの記録

概要

Amazon.comマーケットプレイスで本を購入したところ、商品説明に記載の状態と現物の状態に差異がありました。出品者と交渉を行い、一部返金で合意しました。合意に至るまでの記録をまとめます。

注文

Amazon.comアメリカ)で絶版本(英語で書かれた技術書)を注文しました。
Amazon.co.jp(日本)でも購入可能だったのですが、以下の点で Amazon.com を選びました。

マーケットプレイスでは New(新品)/Used(古本)のいずれも扱われていました。絶版本なので、新品の出品にはやや警戒しましたが(本当に新品なのか?)、古本との価格差が許容できる範囲であったこともあり、新品で購入することにしました。

新品を扱う出品者は4店(者)ありました。そのうちの1店は評価がやや低く、評価の投票数も少なめであったことから候補から外しました。残り3店は評価及びその投票数とも許容できる水準にありましたが、1店は日本発送ができず、残った2店で価格表示が若干安かった出品者を選択しました。

なお、Amazon.com の商品ページで "Price + Shipping" が表示されていますが、これはアメリカ国内向けの価格表示のようです。日本発送の場合の送料込み価格はカートに入れた後の注文確認画面で表示されます。また、送料は業者によって変わるため、商品ページの価格表示のみで判断しないことが賢明です。

私は以下の料金で購入しました。

Price $61.32
Shipping & Handling $17.80
Grand Total $79.12

問題発生

私が注文した本は "Condition: New" となっていました。

  • New: A brand-new copy with cover and original protective wrapping intact. Books with markings of any kind on the cover or pages, books marked as "Bargain" or "Remainder," or with any other labels attached may not be listed as New condition.
Condition guidelines - Amazon Seller Central

ですが、届いた本は新品とは言えない状態でした。

  • ハードカバーに明らかな凹み
  • 表紙の小さな汚れ・摩耗
  • ページに小さな汚れ

これでは "New" といえず、"Like New" or "Very Good" に相当すると思われます。

  • Used - Like New: Item may have minor cosmetic defects (such as marks, wears, cuts, bends, or crushes) on the cover, spine, pages, or dust cover. Dust cover is intact and pages are clean and not marred by notes. Item may contain remainder marks on outside edges. Item may be missing bundled media.
  • Used - Very Good: Item may have minor cosmetic defects (such as marks, wears, cuts, bends, or crushes) on the cover, spine, pages, or dust cover. Shrink wrap, dust covers, or boxed set case may be missing. Item may contain remainder marks on outside edges, which should be noted in listing comments. Item may be missing bundled media.
Condition guidelines - Amazon Seller Central

そこで、出品者と交渉することにしました。

交渉

1日目

まず、交渉の基本方針を決めました。

本自体は例え古本でも入手したいと考えていました。また、改めて最新の価格をチェックすると、私が注文した時点よりも価格が上がっていました。

これらを踏まえると、返品して買い直すのは得策ではないと考え、返品以外の解決方法で出品者と交渉することにしました。

出品者に連絡をするため、以下の手順を踏みました。

  1. 該当の Order 画面から "Problem with order" ボタンをクリックする。
  2. "What went wrong?" 一覧から "Different from what I ordered" を選択する。
  3. "What would you like to do?" から "Contact seller" を選択する。
  4. メッセージを入力して "Send" ボタンをクリックする。

メッセージのやり取りは全て英語で行いました(Google翻訳が大活躍!)。本エントリ内ではメッセージの概要を日本語でまとめます。

私 ⇒ 出品者
私はこの本が新品と聞いて購入しました。ですが、私が受け取った本は傷がついていて、へこんでいて、汚れていて、新品とはいえません。これならば状態の良い古本を買った方がよかった。返品とまでは言わないが、値引きをお願いしたい。

これを送った直後に Amazon は購入者に対する保護が手厚い(逆にいえば出品側には厳しい)ことを思い出しました。また、最初から弱気な態度で交渉するのは不利であると考え、2通目のメッセージを送りました。

私 ⇒ 出品者
私は少し前にこのメッセージを送りました。
<先ほどのメッセージ>
ですが、私は気が変わりました。あなたが新品と表示して販売したのに古本を送ったのは間違っています。新品を送りなおしてください。

2日目

出品者からの回答が Amazon Marketplace のメールアドレスから届きました。

出品者 ⇒ 私
あなたの受け取った商品が期待したものと異なり、大変申し訳ございません。
20%の一部返金でいかがでしょうか?
出品者は私の2通目のメッセージを読んだうえで回答してくれたようですが(返信に私の2通目のメッセージが含まれていた)、新品を送る気はなさそうです。また、私の1通目のメッセージが弱気だったこともあり、足元を見られた感もあります。

この回答に対し返信する方法がヘルプを探しても不明だったので、Amazon.com のサポートに問い合わせたところ、以下の方法で返信できるとのことでした。

今回は Message Center を利用して返信しました。

まず、20%の返金は機会損失(購入当時の古本価格はもっと安かった)を考えると、返金額が少なすぎました。現時点の古本相場も踏まえ、最低30%の返金を求めたいと考えました。ただ、更なる交渉をされる可能性を考え、先方が妥協できる(ビジネスとして成り立つ)と思える範囲かつ、こちらの交渉の余地も残した40%の返金で提案することにしました。

また、単に40%の返金を提案するのではなく、その理由を提示することにしました。
これは過去の経験が思い起こされたからです。学生時代にアメリカ旅行した時のことですが、立ち寄った古着屋で値段交渉をし、提示された価格から更なるディスカウントを求めたところ、店員からすごい勢いでまくしたてられました。内容を聞き取ることはできませんでしたが、それがそれ以上値引きできない理由を説明していることだけは伝わりました。この経験から自分の考えを主張することが大切なのだと身をもって知り、今回の交渉に活かすことにしました。

これを踏まえ、以下の内容で返信しました。

私 ⇒ 出品者
新品と交換できないと聞き、大変悲しいです。
あなたが新品と交換できず、払い戻ししたいと考えるのであれば、私は40%の一部返金をお願いしたい。
その理由を以下に挙げます。

  • あなたが新品(実際には古本)を出品しなければ、私は古本をより安く買うことができました。今は値段が上がってしまいました。この逃したチャンスをあなたは補填することができます。
  • 私が返品を希望すれば、あなたは送料を負担しなければなりません。そして、再度販売するためのコストが発生します。あなたが40%の一部払い戻しで妥協すれば、残りの金額を受け取ることができます。

3日目

そして、出品者から回答がありました。

出品者 ⇒ 私
返金額 = $25.00
あなたのアカウントに返金を行いました。

あっけないほど40%の返金が認められました。そして数日後に Amazon.com からも返金を通知するメールが届きました。

Order 画面では以下の表示となりました。

Price $61.32
Shipping & Handling $17.80
Grand Total $79.12
Refund Total $25.00

まとめ

出品者の評価が高くても、今回のようなトラブルに遭遇することはあり得ます。ですが、Amazon は購入者保護に力を入れていることで知られています。泣き寝入りすることなく、まずは出品者と交渉しましょう。出品者との交渉が上手くいかなければ、Amazon に解決を依頼することもできます。

Amazon.com Help: About A-to-z Guarantee
Amazon.co.jp ヘルプ: Amazonマーケットプレイス保証の申請条件

ちなみに、今回購入した本の最新の出品一覧を確認したところ、同じ出品者が "Condition:New" で私の当初の購入価格よりさらに高く(2倍近い価格で!)販売していました…。今回の交渉で出品者のビジネスを成立させてあげようなどと情けをかける必要はなかったのかもしれません。

参考

A-to-z Guarantee は購入者にとって有利な制度です。逆に出品者にとっては厳しい制度でもあります。そのことがうかがえる記事を紹介します。

【出品者視点】
Amazonマーケットプレイス保証とは?A-to-Z Guarantee claimsが申請されたら? | Amazon輸出ビジネス~虎の巻~

【購入者視点】
アメリカのamazon(マケプレ)で詐欺られてみた話。対処方法(A-to-Z Guarantee claims)も一応紹介。

今回の交渉で出品者があっさり妥協した背景にはこの制度があったからかもしれません。

Transactional Information Systems 5章 MVCC勉強会 第七回 議論メモ

勉強会について

Transactional Information Systems 5章 MVCC勉強会 第七回 - connpass の議論メモです。

自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。

特記の無い引用は本で議論した箇所を示しています。

Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery (The Morgan Kaufmann Series in Data Management Systems)

Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery (The Morgan Kaufmann Series in Data Management Systems)

5.5.2 The MV2PL Protocol

MV2PL protocol

committed versions, which have been written by transactions that are already committed,

the current version of a data item, which is the committed version of that data item written by the transaction that was committed last,

uncommitted versions, which are all remaining versions (created by transactions that are still active).

ここでの "current version" が「最新の "committed version"」であることに注意する。通常でいうところの "current version" といえば "uncommitted version" に相当する。

EXAMPLE 5.9 でみるように、この Protocol は TX 開始時点で read する version が決まっているように見える。

final step、つまり commit 直前の step だけが特別扱いとなる。

ここでは commit が concurrent に進む前提としている(SILOのような group commit は前提としていない)。


step は以下のルールに従う。

1. step が final step でないとき。

1.(a)
read は current version or uncommitted version を読む。

the most recently committed version (but not any other, previously committed one), or by assigning to it an uncommitted version of x;

この "or" は read protocol 次第でいずれかに決まる。"or" をどちらでも read してよいと解釈することもできるが、そうすると結局どちらを read するのか?都合が悪ければ変えることができるのか?(勉強会ではこれを「神の read protocol」と呼称していた)と考えることになる。

1.(b)
uncommitted な w(x) があるとき、後続の w(x) は待たされる。事実上 write lock している。

2. 次のルールに該当する tj が commit されるまで ti の最後のステップは delay する。これは commit protocol のようにも見える。

2.(a)
ti が overwrite しようとする item の current version を read する tj が commit するまで待つ。これは w-r の間に ti の w を入れたくない、つまり RF を壊さないためのルールとなっている。

2.(b)
ti が read した version を write した tj の commit を待つ。これは ti 自身の RF を維持するためにある。

このように RF で考えたほうが整理しやすい。


EXAMPLE 5.9 を見ていく。

"following sequence of steps" なので、s はスケジュールではない。単に operations をキューに積んでいるイメージだ。

step 3. では uncommitted version を read している。
step 5. では committed version を read している。
この違いを合理的に解釈するには TX 開始時点で read する version が決まっている、つまりスナップショットであると解釈すればよいのではないか。

final step の判定をどう行うのか?w2(x) の時点ではそれが final step かはわからず、w2(x)c2 までこないとわからない。

step 7. の後には step として c1 が入っているはず。省略しているだけと思われる。

2PL の要素は "wait" だ。最後まで引っ張って "wait" を開放する。

2V2PL protocol

リカバリーの為に before image を持っているのであれば、それを使えばうまくいくといっている。だが、これは MV といえるのか?また、実際に使われている DB はこのレベルを実現しているにすぎない。

"2V2PL uses three kinds of locks on data items (i.e., not on individual versions)" とあるが、2V なので 2 versions はあり、それぞれがロックを持っているように見える。

2V2PL は read の後の write を1つまでは wait させない、だから 1V より有利としている。

Figure 5.4 の式の例は間違いが多い。例えば wl2(x) の後に w2(x) がない。他にも複数の間違いがある。