<div dir="ltr"><div><div>村上です。<br><br>なるほど、そういう事情があってgrn_raは8byteまでとされていたのですね。<br><br>8byte以上のgrn_raを許可してしまうと、参照ロックフリー下では例外的になっ<br>てしまい、あまりよろしくないですね。<br><br>理解しました。他への影響もあるかもしれませんし、変更なくても大丈夫です。<br><br>とりあえず、8byte以上の固定長カラムを使えない前提で、私の用途でgrn_jaを<br>使った場合の性能や精度を検証したいと思います。<br><br>64ビットでも次元数がでかすぎなければ、そこそこの精度がでるっぽいので、<br>64ビットまででもいいかなぁと思ったりもしてます。<br>(あとは欲しい高類似度部分だけminhashじゃなくて真の類似度を再計算したり<br>するとかでもいいかも)<br><br></div>どうもありがとうございました。<br><br>今年もよろしくお願いします。<br><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016年1月5日 13:52 Susumu Yata <span dir="ltr">&lt;<a href="mailto:yata****@razil*****" target="_blank">yata****@razil*****</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">矢田です.<br>
<br>
村上さんの指摘通り, grn_ra は 8 bytes より大きな要素に対応しています.<br>
しかし,要素が 8 bytes より大きくなると,アトミックに更新できなくなるため,<br>
更新中の参照で不完全なデータが見える可能性があります.<br>
たとえば, 16 bytes の要素について,前半は更新前,後半は更新後というように,<br>
中途半端なデータを取り出してしまうケースが考えられます.<br>
<br>
grn_ja については,新しいデータは新しい領域に配置し,位置情報をアトミックに<br>
書き換えることで上述の問題を回避しています.<br>
<br>
固定長の要素を保存するカラムなのに grn_ja を使っている理由は以上で,<br>
参照ロックフリーを維持するため, grn_ra を使うわけにはいかないのです.<br>
<br>
そういうわけで,使い方がシングルスレッド限定だったり,多少の誤りは気に<br>
しなかったりするのであれば, grn_ra を使えるようにするのもありかもしれません.<br>
ただ,「参照ロックフリーです,ただし○○は除く」的な存在になるのが気になります.<br>
後は,ほかのところで問題が出るかもしれないのが少し怖いところです.<br>
<br>
今年もよろしくお願いいたします.<br>
<br>
<br>
2016年1月5日 0:16 Naoya Murakami &lt;<a href="mailto:visio****@gmail*****">visio****@gmail*****</a>&gt;:<br>
<div><div class="h5">&gt; 村上です。<br>
&gt;<br>
&gt; 現在、grn_column_createではsizeof(int64_t)=8バイトを超えるものは<br>
&gt; 可変長カラムのgrn_ja_createが利用されるようになっています。<br>
&gt; <a href="https://github.com/groonga/groonga/blob/v5.1.1/lib/db.c#L4518" rel="noreferrer" target="_blank">https://github.com/groonga/groonga/blob/v5.1.1/lib/db.c#L4518</a><br>
&gt;<br>
&gt; 一方、固定長カラムのgrn_ra_createはもっと大きいサイズでも入るように<br>
&gt; デザインされていると思います。<br>
&gt; <a href="https://github.com/groonga/groonga/blob/v5.1.1/lib/store.c#L36-L39" rel="noreferrer" target="_blank">https://github.com/groonga/groonga/blob/v5.1.1/lib/store.c#L36-L39</a><br>
&gt;<br>
&gt; ビルトイン型だけの場合、固定長カラムはINT64まででいいと思うのですが、<br>
&gt; C-APIのgrn_type_createを使って、UINT128,256とかもう少し大きいものを<br>
&gt; 保存したいと考えています。<br>
&gt;<br>
&gt; 具体的な私のユースケースとしてはカラムのminhash値の最下位ビットk個を<br>
&gt; 保持しておいて高速に類似計算することを実験しています。<br>
&gt; <a href="https://github.com/naoa/groonga-minhash" rel="noreferrer" target="_blank">https://github.com/naoa/groonga-minhash</a><br>
&gt; kが多いほど精度を上げられるため、64ビット以上のビット列を保持したいと<br>
&gt; 思っています。<br>
&gt;<br>
&gt; SHORT_TEXTと区別するだけでいいなら、たとえば、以下のように4096以上<br>
&gt; の場合のみgrn_ja_createにするようにしてもらえないでしょうか?<br>
&gt;<br>
&gt; if ((flags &amp; GRN_OBJ_KEY_VAR_SIZE) || value_size &gt;= 4096) {<br>
&gt;<br>
&gt; 以上、ご検討よろしくお願いします。<br>
&gt;<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; groonga-dev mailing list<br>
&gt; <a href="mailto:groon****@lists*****">groon****@lists*****</a><br>
&gt; <a href="http://lists.osdn.me/mailman/listinfo/groonga-dev" rel="noreferrer" target="_blank">http://lists.osdn.me/mailman/listinfo/groonga-dev</a><br>
&gt;<br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
<br>
--<br>
Susumu Yata &lt;<a href="mailto:yata****@razil*****">yata****@razil*****</a>&gt;<br>
_______________________________________________<br>
groonga-dev mailing list<br>
<a href="mailto:groon****@lists*****">groon****@lists*****</a><br>
<a href="http://lists.osdn.me/mailman/listinfo/groonga-dev" rel="noreferrer" target="_blank">http://lists.osdn.me/mailman/listinfo/groonga-dev</a><br>
</font></span></blockquote></div><br></div>