ODROID C2 SBC

I use MongoDB as my database of choice as you can tell by my blog entries.  Under current Raspberry Pi OSs, MongoDB is limited by 32 bit binaries. Databases are restricted to 2GB.

The Raspberry Pi 3 sports an ARMv7 processor that supports 64 bits.  At this time (May 2016) there is no official OS support for 64 bits.  Raspbian and Arch Linux are only available with 32 bit support.  I expect that we WILL see 64 bit support sometime in the future 😉

While waiting, I looked around and found MongoDB 3.2.6 3.2.10 in the Arch Linux ARM aarch64 package repository.  I also found out that the ODROID C2 single board computer supports aarch64.  This SBC costs $40 and has better specs (for my DB purposes) than the R-Pi 3.  It has a 4-core ARMv8 processor running at 2GHz, 2GB of RAM and gigabit ethernet. It also supports WAY fast eMMC Flash storage in addition to Micro SD.  Android and Ubuntu are the officially supported OSs but Arch Linux ARM (64 bit) can be installed as well.

[UPDATE: 23 Mar 2017] If you prefer to use the default Ubuntu Linux for ODROID C2 as opposed to Arch, you can now install official MongoDB 3.4.  See this blog post.

 

I purchased an ODROID C2 to see if I could get 64 bit MongoDB running.  Shipping from South Korea was surprisingly quick and I was soon loading Arch Linux and installing MongoDB 3.2.6 3.2.9 and associated tools.  I am very happy with the result!  I have an external USB drive that holds my DBs.  The drive is one I purchased for R-Pi, the Western Digital PiDrive.  I am now able to have large databases on inexpensive hardware.  It’s not the fastest but suits my limited needs.  I am contemplating building have built a small dedicated cluster of ODROID C2 SBCs for MongoDB replication and failover.

ODROID-C2-stack-B

Don’t let the Raspberry Pi cut-out fool you 😉  These are 4 ODROID C2 SBCs.  They have the same mounting holes as R-Pi.  Picked up the inexpensive stack mount on Amazon.  Made the drive stack mount from 2 pieces of acrylic from Tap Plastics and some left-over plastic screw-posts.

ODROID-C2-stack-A

[root@odroid64 andy]# lscpu
Architecture: aarch64
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 4
CPU max MHz: 2016.0000
CPU min MHz: 100.0000

NOTE: MongoDB version for aarch64 was updated to v3.2.9-2 in August 2016

[root@odroid64 andy]$ mongod -version
db version v3.2.9
git version: 22ec9e93b40c85fc7cae7d56e7d6a02fd811088c
OpenSSL version: OpenSSL 1.0.2h 3 May 2016
allocator: system
modules: none
build environment:
distarch: arm64
target_arch: arm64


[root@odroid64 andy]$ mongo
MongoDB shell version: 3.2.9
connecting to: test


> use bldata
switched to db bldata


> db.stats()
{
"db" : "bldata",
"collections" : 3,
"objects" : 4076828,
"avgObjSize" : 1411.9657812397286,
"dataSize" : 5756341632,
"storageSize" : 7159521280,
"numExtents" : 26,
"indexes" : 1,
"indexSize" : 132279504,
"fileSize" : 10666115072,
"nsSizeMB" : 16,
"extentFreeList" : {
"num" : 0,
"totalSize" : 0
},
"dataFileVersion" : {
"major" : 4,
"minor" : 22
},
"ok" : 1
}