[英]How do I use the MySQL MEMORY storage engine with Knex?
我正在使用Knex和MySQL進行生產。 我一直在使用SQLite內存進行測試,但是存在一些細微的不一致之處,因此我想切換到在內存中使用MySQL。 誰能推薦一個好的方法來做到這一點?
我目前的工作方式是,我的Knex對象是單例對象,並且在測試上下文中運行時具有進程標記。 我當時想我可以在遷移中添加以下內容:
await knex
.schema
.createTable('organization', table => {
if (knex.processFlag === 'test')
table.engine('MEMORY');
table.increments('id').primary().unsigned();
table.string('address');
table.string('city');
table.string('state');
table.string('country');
table.string('post_code');
});
思考? 我沒有考慮的這種方法有問題嗎?
TLDR:我不建議這樣做。
我自己也在想同樣的事情。 您可以按照建議使用Knex創建內存表: table.engine('MEMORY');
但是,它遇到與使用SQLite相同的問題,但更糟。 這不像InnoDB存儲在內存中而不是存儲在磁盤中一樣,它是一個完全不同的引擎,它甚至沒有嘗試表現得像InnoDB。
我嘗試按照您的建議替換InnoDB表,但是沒有用。 當只替換幾個表時,我的外鍵約束失敗。 某些表甚至無法創建,因為內存引擎不支持Blob / Text字段。 可能還有更多不同之處,但我停在那里。
更新 :經過一番研究,我發現最好的解決方案是讓MySQL將其數據存儲在tempfs掛載 (RAM磁盤)上。
就我而言,我們使用docker,就像在MySQL容器的docker-compose中添加以下幾行一樣簡單。
tmpfs:
- /var/lib/mysql
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.