<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>Vu Nguyen Duy, Author at Tomoshare</title>
	<atom:link href="https://blog.tomosia.com.vn/author/vunguyenduy/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/author/vunguyenduy/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Wed, 06 Dec 2023 09:31:23 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.tomosia.com.vn/wp-content/uploads/2023/09/cropped-icon-32x32.png</url>
	<title>Vu Nguyen Duy, Author at Tomoshare</title>
	<link>https://blog.tomosia.com.vn/author/vunguyenduy/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Active Record Encryption</title>
		<link>https://blog.tomosia.com.vn/active-record-encryption/</link>
					<comments>https://blog.tomosia.com.vn/active-record-encryption/#comments</comments>
		
		<dc:creator><![CDATA[Vu Nguyen Duy]]></dc:creator>
		<pubDate>Wed, 06 Dec 2023 09:29:59 +0000</pubDate>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=2146</guid>

					<description><![CDATA[<p>Encryption là tính năng mới được giới thiệu trong Rails 7, cho phép mã hóa các trường cơ&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/active-record-encryption/">Active Record Encryption</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="674" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-30-at-10.31.16-1024x674.png" alt="" class="wp-image-2148" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-30-at-10.31.16-1024x674.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-30-at-10.31.16-300x198.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-30-at-10.31.16-768x506.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-30-at-10.31.16-1536x1011.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-30-at-10.31.16-2048x1349.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-30-at-10.31.16-380x250.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-30-at-10.31.16-800x527.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-30-at-10.31.16-1160x764.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-30-at-10.31.16.png 2454w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Encryption là tính năng mới được giới thiệu trong Rails 7, cho phép mã hóa các trường cơ sở dữ liệu. Điều này giúp bảo vệ thông tin nhạy cảm trong ứng dụng của bạn.</p>



<p>Để sử dụng tính năng này, bạn có thể sử dụng phương thức&nbsp;<code>encrypts</code>&nbsp;của ActiveRecord để đánh dấu các trường cần được mã hóa. Sau đó, ActiveRecord sẽ tự động mã hóa và giải mã các trường này khi cần thiết.</p>



<h5 id="1-setup" class="wp-block-heading"><strong>1. Setup</strong></h5>



<p>Vì đã được tích hợp vào Rails 7 bạn chỉ cần chạy&nbsp;<code>bin/rails db:encryption:init</code>&nbsp;để tạo ra random key, ví dụ:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Ruby</span><span role="button" tabindex="0" data-code="active_record_encryption:
  primary_key: EGY8WhulUOXixybod7ZWwMIL68R9o5kC
  deterministic_key: aPA5XyALhf75NNnMzaspW7akTfZp0lPY
  key_derivation_salt: xEY0dt6TZcAMg52K7O84wYzkjvbA62Hz" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">active_record_encryption</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">  primary_key</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">EGY8WhulUOXixybod7ZWwMIL68R9o5kC</span></span>
<span class="line"><span style="color: #F6F6F4">  deterministic_key</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> aPA5XyALhf75NNnMzaspW7akTfZp0lPY</span></span>
<span class="line"><span style="color: #F6F6F4">  key_derivation_salt</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> xEY0dt6TZcAMg52K7O84wYzkjvbA62Hz</span></span></code></pre></div>



<p>copy và paste vào trong Rails credentials của dự án</p>



<h5 id="2-cach-khai-bao-va-truy-van" class="wp-block-heading"><strong>2. Cách khai báo và truy vấn</strong></h5>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Ruby</span><span role="button" tabindex="0" data-code="class User &lt; ApplicationRecord
  encrypts :email
end" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">class</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1">User</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">ApplicationRecord</span></span>
<span class="line"><span style="color: #F6F6F4">  encrypts </span><span style="color: #BF9EEE">:email</span></span>
<span class="line"><span style="color: #F286C4">end</span></span></code></pre></div>



<p>ActiveRecord sẽ tự động encrypt và decrypt trường&nbsp;<code>email</code>&nbsp;khi bạn lưu hoặc truy xuất các bản ghi từ cơ sở dữ liệu. Ví dụ:</p>



<p><strong>Khi tạo mới:</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Ruby</span><span role="button" tabindex="0" data-code="user = User.create email: &quot;user@example.com&quot;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">user </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4">.create email</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">user@example.com</span><span style="color: #DEE492">&quot;</span></span></code></pre></div>



<p>SQL sẽ được thực thi như thế này</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">SQL</span><span role="button" tabindex="0" data-code="INSERT INTO `users` (`email`) VALUES ('{\&quot;p\&quot;:\&quot;n7J0/ol+a7DRMeaE\&quot;,\&quot;h\&quot;:{\&quot;iv\&quot;:\&quot;DXZMDWUKfp3bg/Yu\&quot;,\&quot;at\&quot;:\&quot;X1/YjMHbHD4talgF9dt61A==\&quot;}}')" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">INSERT INTO</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">`</span><span style="color: #E7EE98">users</span><span style="color: #DEE492">`</span><span style="color: #F6F6F4"> (</span><span style="color: #DEE492">`</span><span style="color: #E7EE98">email</span><span style="color: #DEE492">`</span><span style="color: #F6F6F4">) </span><span style="color: #F286C4">VALUES</span><span style="color: #F6F6F4"> (</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">{\&quot;p\&quot;:\&quot;n7J0/ol+a7DRMeaE\&quot;,\&quot;h\&quot;:{\&quot;iv\&quot;:\&quot;DXZMDWUKfp3bg/Yu\&quot;,\&quot;at\&quot;:\&quot;X1/YjMHbHD4talgF9dt61A==\&quot;}}</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">)</span></span></code></pre></div>



<ul class="wp-block-list">
<li>p: là payload, thông tin email đã được mã hoá</li>



<li>h: là một Hash của headers chứa thông tin liên quan đến hoạt động mã hóa.</li>



<li>iv: là vector khởi tạo đoạn text đã được mã hóa</li>



<li>at: là một auth_tag sẽ được sử dụng trong quá trình giải mã để xác minh rằng văn bản đã được mã hóa không bị thay đổi</li>
</ul>



<p><strong>Khi đọc data</strong>:</p>



<p>Khi chúng ta thực hiện truy vấn vào User để lấy giá trị email được mã hoá thì Rail sẽ tự động decrypt giá trị email đã được mã hoá trước đó</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">SQL</span><span role="button" tabindex="0" data-code="user.email # =&gt; &quot;user@example.com&quot;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #BF9EEE">user</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">email</span><span style="color: #F6F6F4"> # </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">user@example.com</span><span style="color: #DEE492">&quot;</span></span></code></pre></div>



<p>Như bạn có thể thấy, giá trị được mã hóa được tự động dịch sang thuộc tính có thể đọc được như trên.</p>



<p><strong>Khi tìm kiếm</strong>:</p>



<p>Chúng ta cũng thực hiện truy vấn tìm kiếm như bình thường</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Ruby</span><span role="button" tabindex="0" data-code="user = User.find_by!(email: &quot;user@example.com&quot;)" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">user </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">User</span><span style="color: #F6F6F4">.find_by!(email</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">user@example.com</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">)</span></span></code></pre></div>



<p>Trong SQL sẽ thực thi như thế này</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:-3.578125px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">SQL</span><span role="button" tabindex="0" data-code="User Load (2.1ms)  SELECT &quot;users&quot;.* FROM &quot;users&quot; WHERE &quot;users&quot;.&quot;email&quot; = ? LIMIT ?  [[&quot;email&quot;, &quot;{\&quot;p\&quot;:\&quot;oVgEJvRaX6DJvA==\&quot;,\&quot;h\&quot;:{\&quot;iv\&quot;:\&quot;WYypcKysgBY05Tum\&quot;,\&quot;at\&quot;:\&quot;OaBswq+wyriuRQO8yCVD3w==\&quot;}}&quot;], [&quot;LIMIT&quot;, 1]]

=&gt; #&lt;User id: 1, email: &quot;user@example.com&quot;, created_at: &quot;2021-05-28 22:41:23.142635000 +0000&quot;, updated_at: &quot;2021-05-28 22:41:23.142635000 +0000&quot;&gt;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">User </span><span style="color: #F286C4">Load</span><span style="color: #F6F6F4"> (</span><span style="color: #BF9EEE">2</span><span style="color: #F6F6F4">.1ms)  </span><span style="color: #F286C4">SELECT</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">users</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">.</span><span style="color: #F286C4">*</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">FROM</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">users</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">WHERE</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">users</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">.</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">email</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> ? </span><span style="color: #F286C4">LIMIT</span><span style="color: #F6F6F4"> ?  [[&quot;email&quot;, &quot;{\&quot;p\&quot;:\&quot;oVgEJvRaX6DJvA==\&quot;,\&quot;h\&quot;:{\&quot;iv\&quot;:\&quot;WYypcKysgBY05Tum\&quot;,\&quot;at\&quot;:\&quot;OaBswq+wyriuRQO8yCVD3w==\&quot;}}&quot;], [&quot;LIMIT&quot;, 1]]</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> #</span><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4">User id: </span><span style="color: #BF9EEE">1</span><span style="color: #F6F6F4">, email: </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">user@example.com</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">, created_at: </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">2021-05-28 22:41:23.142635000 +0000</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">, updated_at: </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">2021-05-28 22:41:23.142635000 +0000</span><span style="color: #DEE492">&quot;</span><span style="color: #F286C4">&gt;</span></span></code></pre></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<h5 id="3-cac-kieu-encrypt" class="wp-block-heading"><strong>3. Các kiểu Encrypt</strong></h5>



<p><strong>Deterministic Encryption: </strong></p>



<ul class="wp-block-list">
<li><strong>Đặc điểm:</strong>
<ul class="wp-block-list">
<li>Khi bạn sử dụng deterministic encryption, cùng một dữ liệu đầu vào sẽ luôn cho ra cùng một đầu ra mã hóa. Điều này có nghĩa là không có sự ngẫu nhiên được áp dụng trong quá trình mã hóa.</li>



<li>Mục đích chính là để hỗ trợ việc <em><strong>tìm kiếm</strong></em> và so sánh trực tiếp giữa các giá trị đã được mã hóa.</li>
</ul>
</li>



<li><strong>Ví dụ:</strong>
<ul class="wp-block-list">
<li>Giả sử bạn có một cột <code>name</code> trong bảng User. Nếu bạn sử dụng deterministic encryption, hai bản ghi <code>name</code> có cùng giá trị sẽ được mã hóa thành cùng một giá trị mã hóa, giúp cho việc tìm kiếm nhanh chóng và so sánh dữ liệu.</li>
</ul>
</li>
</ul>



<p><strong> Non-deterministic Encryption:</strong></p>



<ul class="wp-block-list">
<li><strong>Đặc điểm:</strong>
<ul class="wp-block-list">
<li>Ngược lại với deterministic encryption, non-deterministic encryption sử dụng yếu tố ngẫu nhiên trong quá trình mã hóa. Kết quả là cùng một đầu vào sẽ cho ra các đầu ra mã hóa khác nhau mỗi lần mã hóa.</li>
</ul>
</li>



<li><strong>Ví dụ:</strong>
<ul class="wp-block-list">
<li>Nếu bạn có một cột chứa thông tin nhạy cảm và bạn muốn mỗi lần mã hóa tạo ra một giá trị khác nhau, bạn có thể sử dụng non-deterministic encryption. Điều này giúp ngăn chặn việc xác định giá trị ban đầu thông qua việc so sánh các giá trị mã hóa.</li>
</ul>
</li>
</ul>
</div></div>



<h5 id="4-uu-nhuoc-diem" class="wp-block-heading"><strong>4. Ưu nhược điểm</strong></h5>



<p><strong>Ưu điểm:</strong></p>



<ul class="wp-block-list">
<li>Bảo vệ thông tin nhạy cảm trong cơ sở dữ liệu của bạn khỏi truy cập trái phép.</li>



<li>Giúp đáp ứng các yêu cầu về bảo mật dữ liệu của các quy định như GDPR hoặc IT-Sicherheitsgesetz.</li>



<li>Cung cấp một cách dễ dàng để mã hóa và giải mã các trường cơ sở dữ liệu.</li>
</ul>



<p><strong>Nhược điểm:</strong></p>



<ul class="wp-block-list">
<li>Chức năng tìm kiếm mà mã hóa cung cấp yêu cầu một kết quả chính xác về văn bản tìm kiếm. Điều này có nghĩa là việc thực hiện truy vấn LIKE,  sẽ không hoạt động.</li>



<li>Trong Rails Console vẫn sẽ hiển thị data đã được mã hoá.:c</li>



<li>Chúng ta có thể encrypt với rich text, nhưng chỉ thực hiện bằng non-deterministically&nbsp;encryption, đồng nghĩa với việc chúng ta không thể tìm kiếm rich text</li>
</ul>



<p>Trên đây là giới thiệu về Encrypt được tích hợp vào rails 7, hi vọng có thể giúp ích cho mọi người. Cảm ơn mọi người.</p>
<p>The post <a href="https://blog.tomosia.com.vn/active-record-encryption/">Active Record Encryption</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/active-record-encryption/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Tìm hiểu find_each, find_in_batches và in_batches</title>
		<link>https://blog.tomosia.com.vn/tim-hieu-find_each-find_in_batches-va-in_batches/</link>
					<comments>https://blog.tomosia.com.vn/tim-hieu-find_each-find_in_batches-va-in_batches/#comments</comments>
		
		<dc:creator><![CDATA[Vu Nguyen Duy]]></dc:creator>
		<pubDate>Tue, 31 Oct 2023 02:03:24 +0000</pubDate>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Rails7.1]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1614</guid>

					<description><![CDATA[<p>Khi làm việc với dữ liệu lớn trong ứng dụng Ruby on Rails, việc truy vấn và xử&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/tim-hieu-find_each-find_in_batches-va-in_batches/">Tìm hiểu find_each, find_in_batches và in_batches</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Khi làm việc với dữ liệu lớn trong ứng dụng Ruby on Rails, việc truy vấn và xử lý hàng loạt dữ liệu có thể trở nên phức tạp. Để giải quyết vấn đề này, Rails cung cấp các phương thức quan trọng: <code>find_each</code>, <code>find_in_batches</code>, <code>in_batches</code>. Trong bài viết này, chúng ta sẽ tìm hiểu về cách sử dụng chúng.</p>



<h2 id="1-find_each" class="wp-block-heading"><strong>1.find_each:</strong></h2>



<ul class="wp-block-list">
<li><code>find_each</code> là một phương thức mạnh mẽ giúp bạn truy vấn và xử lý hàng loạt dữ liệu một cách hiệu quả. Thay vì lấy toàn bộ kết quả truy vấn vào bộ nhớ và xử lý cùng một lúc, <code>find_each</code> cho phép bạn truy vấn từng phần dữ liệu nhỏ, tiết kiệm tài nguyên hệ thống.</li>



<li>Ví dụ sử dụng <code>find_each</code>:<br></li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1">Ruby</span><span role="button" tabindex="0" data-code="User.find_each(batch_size: 1000) do |user|
  # Xử lý dữ liệu của user
end" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #8BE9FD; font-style: italic">User</span><span style="color: #F8F8F2">.find_each(batch_size</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">1000</span><span style="color: #F8F8F2">) </span><span style="color: #FF79C6">do</span><span style="color: #F8F8F2"> |user|</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #6272A4"># Xử lý dữ liệu của user</span></span>
<span class="line"><span style="color: #FF79C6">end</span></span></code></pre></div>



<p>Trong ví dụ trên, <code>batch_size</code> xác định số lượng bản ghi được truy vấn và xử lý trong mỗi lần lặp. Điều này giúp giảm áp lực lên bộ nhớ và tăng hiệu suất xử lý.<br></p>



<h2 id="2-find_in_batches" class="wp-block-heading">2. <strong>find_in_batches:</strong></h2>



<ul class="wp-block-list">
<li><code>find_in_batches</code> là một phương thức tương tự như <code>find_each</code>, nhưng thay vì lặp qua từng bản ghi, nó trả về từng batch (nhóm) bản ghi mà bạn có thể xử lý một cách đồng thời.</li>



<li>Ví dụ sử dụng <code>find_in_batches</code>:</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1">Ruby</span><span role="button" tabindex="0" data-code="User.find_in_batches(batch_size: 200) do |users|
  users.each do |user|
    # Xử lý dữ liệu của user
  end
end" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #8BE9FD; font-style: italic">User</span><span style="color: #F8F8F2">.find_in_batches(batch_size</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">200</span><span style="color: #F8F8F2">) </span><span style="color: #FF79C6">do</span><span style="color: #F8F8F2"> |users|</span></span>
<span class="line"><span style="color: #F8F8F2">  users.each </span><span style="color: #FF79C6">do</span><span style="color: #F8F8F2"> |user|</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Xử lý dữ liệu của user</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">end</span></span>
<span class="line"><span style="color: #FF79C6">end</span></span></code></pre></div>



<ul class="wp-block-list">
<li>Những option được sử dụng trong find_each và find_in_batches
<ul class="wp-block-list">
<li><code>batch_size:</code> là kích thước chỉ định của batch. Mặc định là 1000.</li>



<li><code>start: </code>Chỉ định primary_key bắt đầu trong batch, ví dụ bạn muốn lấy từ id = 5000, thì batch của bạn sẽ bắt đầu từ 5000</li>



<li><code>finish:</code> Chỉ định giá trị primary_key để kết thúc, như ở option :start là chọn vị trị bắt đầu thì :finish sẽ là vị trị kết thúc của batch.</li>
</ul>
</li>
</ul>



<h2 id="3-in_batches-trong-rails-7-1" class="wp-block-heading"><strong>3. in_batches trong rails 7.1</strong></h2>



<ul class="wp-block-list">
<li>Các bạn có thể thấy lợi ích của việc sử dụng find_each và find_in_batches ở trên, nhưng nó có hạn chế, việc sắp xếp các record chỉ dựa vào id của bảng và theo mặc định tăng dần, chúng ta không thể sắp xếp theo các trường khác. Thật may mắn trong ở phiên bản  rails 7.1 chúng ta có in_batches cho phép chúng ta sắp xếp theo các column mong muốn.</li>



<li>Ví dụ, nếu bạn muốn sắp xếp các bản ghi theo cột&nbsp;<code>created_at</code>, bạn có thể sử dụng&nbsp;<code>in_batches</code>&nbsp;như sau:</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1">Ruby</span><span role="button" tabindex="0" data-code="User.in_batches(of: 1000, order: :created_at) do |batch|
  batch.each do |user|
    # Do something with each user
  end
end
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #8BE9FD; font-style: italic">User</span><span style="color: #F8F8F2">.in_batches(of</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">1000</span><span style="color: #F8F8F2">, order</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">:created_at</span><span style="color: #F8F8F2">) </span><span style="color: #FF79C6">do</span><span style="color: #F8F8F2"> |batch|</span></span>
<span class="line"><span style="color: #F8F8F2">  batch.each </span><span style="color: #FF79C6">do</span><span style="color: #F8F8F2"> |user|</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Do something with each user</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">end</span></span>
<span class="line"><span style="color: #FF79C6">end</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li>Các option hỗ trợ trong in_batches:
<ul class="wp-block-list">
<li><code>of:</code> Số lượng bản ghi tối đa trong mỗi batch.&nbsp;Giá trị mặc định là 1000</li>



<li><code>start:</code> Giá trị khóa chính của bản ghi đầu tiên trong batch.&nbsp;Giá trị mặc định là&nbsp;<code>nil</code>.</li>



<li><code>finish:</code> Giá trị khóa chính của bản ghi cuối cùng trong batch.&nbsp;Giá trị mặc định là&nbsp;<code>nil.</code></li>



<li><code>order:</code> Cột sắp xếp các bản ghi trong batch. Giá trị mặc định là&nbsp;<code>nil</code>.<br></li>
</ul>
</li>
</ul>



<p><strong>NOTE: một vài lưu ý khi sử dụng in_batches:</strong><br></p>



<ul class="wp-block-list">
<li>Nếu bạn không chỉ định cột sắp xếp,&nbsp;<code>in_batches</code>&nbsp;sẽ sắp xếp các bản ghi theo khóa chính của chúng.</li>



<li>Nếu bạn chỉ định cột sắp xếp, hãy đảm bảo rằng cột đó đã được đánh index để tối ưu hóa hiệu suất.</li>



<li>Nếu bạn muốn thực hiện các thao tác cập nhật hoặc xóa trên các bản ghi, hãy đảm bảo rằng bạn đã sử dụng&nbsp;<code>update_all</code>&nbsp;hoặc&nbsp;<code>delete_all</code>&nbsp;để tránh lỗi(áp dụng cho cả find_in_batches), ví dụ: <br></li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1">Ruby</span><span role="button" tabindex="0" data-code="User.in_batches.each do |batch|
  batch.update_all('age = age + 5')
  batch.where('age &gt; 25').update_all(is_married: true)
  batch.where('age &lt;= 25').delete_all
end" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #8BE9FD; font-style: italic">User</span><span style="color: #F8F8F2">.in_batches.each </span><span style="color: #FF79C6">do</span><span style="color: #F8F8F2"> |batch|</span></span>
<span class="line"><span style="color: #F8F8F2">  batch.update_all(</span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">age = age + 5</span><span style="color: #E9F284">&#39;</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #F8F8F2">  batch.where(</span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">age &gt; 25</span><span style="color: #E9F284">&#39;</span><span style="color: #F8F8F2">).update_all(is_married</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">true</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #F8F8F2">  batch.where(</span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">age &lt;= 25</span><span style="color: #E9F284">&#39;</span><span style="color: #F8F8F2">).delete_all</span></span>
<span class="line"><span style="color: #FF79C6">end</span></span></code></pre></div>



<p></p>



<p></p>



<div class="wp-block-cover is-light"><span aria-hidden="true" class="wp-block-cover__background has-cyan-bluish-gray-background-color has-background-dim-100 has-background-dim"></span><div class="wp-block-cover__inner-container is-layout-constrained wp-block-cover-is-layout-constrained">
<p class="has-text-align-center has-medium-font-size">Hi vọng bài viết có thể giúp ích cho các bạn. Chúc các bạn luôn tìm được niềm vui khi coding. 😀</p>
</div></div>
<p>The post <a href="https://blog.tomosia.com.vn/tim-hieu-find_each-find_in_batches-va-in_batches/">Tìm hiểu find_each, find_in_batches và in_batches</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/tim-hieu-find_each-find_in_batches-va-in_batches/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
	</channel>
</rss>
